#include <bits/stdc++.h>
using namespace std;
int N, M, K;
int DP[2][105][105][105];
int C[105][105];
const int INF = 105;
const int MOD = 1000000007;
void precalcC() {
  C[0][0] = 1;
  for (int i = 1; i <= N; i++) {
    C[i][0] = 1;
  }
  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= N; j++) {
      C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
      if (C[i][j] >= INF) C[i][j] = INF;
    }
  }
}
void Add(int& x, int y) {
  x += y;
  if (x >= MOD) x -= MOD;
}
void Solve() {
  int ind = 0, ans = 0;
  for (int i = 1; i <= N; i++) {
    DP[0][i][1][i] = 1;
  }
  for (int m = 1; m <= M; m++) {
    for (int i = 1; i <= N; i++) {
      for (int w = 1; w <= K; w++) {
        for (int gap = 1; gap <= i; gap++) {
          if (DP[ind][i][w][gap] == 0) continue;
          for (int l = gap; l <= N - i; l++) {
            if (C[gap + l - gap - 1][gap - 1] * w > K) break;
            Add(DP[1 - ind][i + l][w * C[gap + l - gap - 1][gap - 1]][l - gap],
                DP[ind][i][w][gap]);
          }
          DP[ind][i][w][gap] = 0;
        }
        Add(ans, (1LL * DP[ind][i][w][0] * (M - m + 1)) % MOD);
        DP[ind][i][w][0] = 0;
      }
    }
    ind ^= 1;
  }
  cout << ans << "\n";
}
int main() {
  cin >> N >> M >> K;
  precalcC();
  Solve();
  return 0;
}
