#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
#pragma GCC optimize("no-stack-protector,fast-math")
using namespace std;
const long long N = 110, OO = 1e9 + 7, T = 1e5 + 10, M2 = 1e9 + 7, M = 1e9 + 7,
                P = 6151, SQ = 800, lg = 70;
long long dp[N / 2][N / 2][N / 2][N], c[N][N];
int32_t main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  long long n, m, w;
  cin >> n >> m >> w;
  for (long long i = 0; i <= n; i++) {
    c[i][0] = c[i][i] = 1;
    for (long long j = 1; j < i; j++)
      c[i][j] = min(w + 1, c[i - 1][j - 1] + c[i - 1][j]);
  }
  if (n % 2 == 1) n--;
  long long ans = 0;
  for (long long i = 2; i <= n; i += 2)
    dp[i / 2][2][i / 2][1] = 1, ans += (m - 1);
  for (long long i = 4; i <= n; i += 2) {
    for (long long j = 3; j <= min(m, (long long)51); j++) {
      for (long long k = 1; k <= i / 2; k++) {
        for (long long h = 1; h <= w; h++) {
          for (long long g = 1;
               2 * k + g + j - 2 <= i && c[g + k - 1][g - 1] <= h; g++)
            if (h % c[g + k - 1][g - 1] == 0)
              dp[i / 2][j][k][h] =
                  (dp[i / 2][j][k][h] +
                   dp[(i - 2 * k) / 2][j - 1][g][h / c[g + k - 1][g - 1]]) %
                  M;
          ans = (ans + dp[i / 2][j][k][h] * (m - j + 1)) % M;
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
