#include <bits/stdc++.h>
using namespace std;
const int Max = 107;
const int mod = 1000000007;
int n, m, K, Ans;
int fac[Max], ifac[Max], dp[2][Max][Max][Max];
int qpow(int x, int k) {
  int re = 1;
  for (; k; k >>= 1, x = 1ll * x * x % mod)
    if (k & 1) re = 1ll * re * x % mod;
  return re;
}
int C(int n, int m) { return 1ll * fac[n] * ifac[m] % mod * ifac[n - m] % mod; }
void Add(int &a, int b) { a = (a + b) % mod; }
int main() {
  scanf("%d%d%d", &n, &m, &K);
  n++;
  fac[0] = 1;
  for (int i = 1; i < Max; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  ifac[Max - 1] = qpow(fac[Max - 1], mod - 2);
  for (int i = Max - 2; i >= 0; i--)
    ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;
  dp[0][0][1][1] = 1;
  for (int i = 0; i < m; i++) {
    int lst = i & 1, now = lst ^ 1;
    memset(dp[now], 0, sizeof dp[now]);
    for (int j = 0; j <= n; j++) {
      for (int k = 1; k <= n; k++) {
        for (int l = 1; l <= K; l++) {
          if (dp[lst][j][k][l]) {
            for (int t = k; t + j <= n; t++) {
              if (1ll * l * C(t - 1, k - 1) <= K) {
                Add(dp[now][j + t][t - k][l * C(t - 1, k - 1)],
                    dp[lst][j][k][l]);
              }
            }
          }
        }
      }
    }
    int tmp = 0;
    for (int j = 2; j <= n; j++) {
      for (int l = 1; l <= K; l++) {
        Add(tmp, dp[now][j][0][l]);
      }
    }
    Add(Ans, 1ll * tmp * (m - i) % mod);
  }
  printf("%d\n", Ans);
  return 0;
}
