#include <bits/stdc++.h>
using ll = long long;
const int mod = 1e9 + 7;
int n, m, p, C[105][105], f[2][105][105][105], ans;
void trans(int a, int b, int c, int &a1, int &b1) {
  a1 = -1;
  b1 = -1;
  if (c < a) return;
  if (a == 0) return;
  int w = C[c - 1][a - 1];
  a1 = c - 1 - (a - 1);
  b1 = w * b;
  if (b1 > p) {
    a1 = b1 = -1;
    return;
  }
  assert(b1 > 0);
  return;
}
int dec(int x) { return x >= mod ? x - mod : x; }
int main() {
  scanf("%d%d%d", &n, &m, &p);
  for (int i = 0; i <= n; ++i) {
    C[i][0] = 1;
    for (int j = 1; j <= i; ++j) {
      C[i][j] = std::min(C[i - 1][j] + C[i - 1][j - 1], p + 1);
    }
  }
  for (int i = 1; i <= n; ++i) f[0][i][i][1] = 1;
  for (int i = 2; i <= m + 1; ++i) {
    int x = i & 1, y = x ^ 1;
    std::memset(f[y], 0, sizeof(f[y]));
    for (int j = 1; j <= n; ++j)
      for (int l = 1; l <= p; ++l)
        ans = (ans + (ll)(m - (i - 1) + 1) * f[x][j][0][l] % mod) % mod;
    for (int j = 1; j <= n; ++j)
      for (int k = 0; k <= n; ++k)
        for (int l = 0; l <= p; ++l) {
          if (!f[x][j][k][l]) continue;
          for (int c = 1; c + j <= n; ++c) {
            int k1, l1;
            trans(k, l, c, k1, l1);
            if (k1 != -1)
              f[y][j + c][k1][l1] = dec(f[y][j + c][k1][l1] + f[x][j][k][l]);
          }
        }
  }
  printf("%d", ans);
  return 0;
}
