#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
inline int add(int a, int b) {
  if ((a += b) >= mod) a -= mod;
  return a;
}
inline int mult(int a, int b) {
  long long t = 1ll * a * b;
  if (t >= mod) t %= mod;
  return t;
}
int n, m, K, f[2][105][105][105], c[105][105];
int main() {
  scanf("%d%d%d", &n, &m, &K);
  if (n == 1) {
    puts("0");
    return 0;
  }
  int ans = 0, cur = 0;
  f[cur][0][1][1] = 1;
  c[0][0] = 1;
  for (int i = 1; i <= 100; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= i; j++) c[i][j] = add(c[i - 1][j - 1], c[i - 1][j]);
  }
  for (int i = 0; i <= m; i++) {
    cur ^= 1;
    memset(f[cur], 0, sizeof(f[cur]));
    if (i) {
      int tc = 0;
      for (int j = 2; j <= n + 1; j++) {
        for (int k = 1; k <= K; k++) tc = add(tc, f[cur ^ 1][j][0][k]);
      }
      ans = add(ans, mult(tc, m - i + 1));
    }
    for (int j = 0; j <= n + 1; j++) {
      for (int k = 1; k <= n + 1; k++) {
        for (int l = 1; l <= K; l++) {
          if (f[cur ^ 1][j][k][l]) {
            for (int t = k; t + j <= n + 1; t++) {
              f[cur][j + t][t - k]
               [min((long long)K + 1, 1ll * l * c[t - 1][k - 1])] =
                   add(f[cur][j + t][t - k]
                        [min((long long)K + 1, 1ll * l * c[t - 1][k - 1])],
                       f[cur ^ 1][j][k][l]);
            }
          }
        }
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
