#include <bits/stdc++.h>
using namespace std;
const int mode = 1e9 + 7;
int n, m, K, f[2][110][110][110], c[110][110];
void inc(int &x, int y) { x = x + y < mode ? x + y : x + y - mode; }
void work() {
  c[0][0] = 1;
  for (int i = 1; i <= 100; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= 100; j++)
      c[i][j] = min(c[i - 1][j - 1] + c[i - 1][j], 101);
  }
  int ans = 0, tmp = 0;
  for (int i = 1; i <= n; i++) f[1][i][i][1] = 1;
  for (int i = 2; i <= m; i++) {
    tmp ^= 1;
    memset(f[tmp ^ 1], 0, sizeof(f[tmp ^ 1]));
    for (int sum = 1; sum <= n; sum++) {
      for (int rest = 1; rest <= sum; rest++)
        for (int k = 1; k <= K; k++) {
          if (!f[tmp][sum][rest][k]) continue;
          int v = f[tmp][sum][rest][k];
          for (int x = rest; x <= n - sum; x++) {
            int k2 = k * c[x - 1][rest - 1];
            if (k2 > K) continue;
            inc(f[tmp ^ 1][sum + x][x - rest][k2], v);
          }
        }
      for (int k = 1; k <= K; k++) inc(ans, f[tmp][sum][0][k] * (m - i + 2));
    }
  }
  tmp ^= 1;
  for (int sum = 1; sum <= n; sum++)
    for (int k = 1; k <= K; k++) inc(ans, f[tmp][sum][0][k]);
  cout << ans;
}
int main() {
  cin >> n >> m >> K;
  work();
}
