#include <bits/stdc++.h>
const int N = 105;
const int M = 1050000;
const int MOD = 1000000007;
bool ever[2][N][N][N], *ever1;
int dp[2][N][N][N], que[2][M][3], tail[2], g[N][N], n, m, p, ans = 0, *dp1,
                                                             *que1;
int main() {
  int i, j, k, l, s, t;
  scanf("%d%d%d", &n, &m, &p);
  dp1 = &dp[0][0][0][0], ever1 = &ever[0][0][0][0], que1 = &que[0][0][0];
  g[0][0] = 1;
  for (j = 1; j <= n; j++)
    for (i = 0; i <= n; i++)
      for (k = 0; k <= i; k++) {
        g[i][j] += g[k][j - 1];
        if (g[i][j] >= MOD) g[i][j] -= MOD;
      }
  for (i = 1; i <= n; i++) {
    tail[0]++;
    *(que1 + tail[0] * 3) = *(que1 + tail[0] * 3 + 1) = i;
    *(que1 + tail[0] * 3 + 2) = *(dp1 + i * N * N + i * N + 1) = 1;
  }
  for (i = 0; i < m; i++) {
    int ii = (i & 1);
    int fi = ii ^ 1;
    for (s = 1; s <= tail[fi]; s++) {
      int *q = que1 + fi * M * 3 + s * 3;
      *(ever1 + fi * N * N * N + *q * N * N + *(q + 1) * N + *(q + 2)) = 0;
    }
    tail[fi] = 0;
    for (s = 1; s <= tail[ii]; s++) {
      j = *(que1 + ii * M * 3 + s * 3);
      k = *(que1 + ii * M * 3 + s * 3 + 1);
      l = *(que1 + ii * M * 3 + s * 3 + 2);
      if (k) {
        for (t = 0; j + k + t <= n && l * g[t][k] <= p; t++) {
          int ss = fi * N * N * N + (j + k + t) * N * N + t * N + l * g[t][k];
          bool *e = ever1 + ss;
          int *d = dp1 + ss;
          if (!*e) {
            *e = 1;
            *d = 0;
            tail[fi]++;
            int *q = que1 + fi * M * 3 + tail[fi] * 3;
            *q = j + k + t;
            *(q + 1) = t;
            *(q + 2) = l * g[t][k];
          }
          *d += *(dp1 + ii * N * N * N + j * N * N + k * N + l);
          if (*d >= MOD) *d -= MOD;
        }
      } else {
        ans += (((long long)(m - i) *
                 *(dp1 + ii * N * N * N + j * N * N + k * N + l)) %
                MOD);
        if (ans >= MOD) ans -= MOD;
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
