#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long qpow(long long x, long long a) {
  long long res = x, ret = 1;
  while (a > 0) {
    if ((a & 1) == 1) ret = ret * res % MOD;
    a >>= 1;
    res = res * res % MOD;
  }
  return ret;
}
long long n, m, t, dp[2][110][110][110], fac[110], c[110][110], ans = 0;
int main() {
  c[0][0] = c[1][0] = c[1][1] = 1;
  for (int i = 2; i <= 105; ++i) {
    c[i][0] = c[i][i] = 1;
    for (int j = 1; j < i; ++j)
      c[i][j] = min((long long)1e9, c[i - 1][j - 1] + c[i - 1][j]);
  }
  cin >> n >> m >> t;
  for (int i = 2; i <= n; ++i) dp[0][i][i - 1][1] = 1;
  for (int ii = 0; ii < m; ++ii) {
    int i = ii & 1;
    for (int j = 2; j <= n + 1; ++j)
      for (int k = 0; k < j; ++k)
        for (int p = 0; p < t + 1; ++p)
          if (dp[i][j][k][p] > 0) {
            if (k == 0 && 1 <= p && p <= t)
              (ans += dp[i][j][k][p] * (long long)(m - (ii + 1) + 1)) %= MOD;
            if (ii == m - 1 || k == 0 || j == n + 1) {
              dp[i][j][k][p] = 0;
              continue;
            }
            for (int nxt = k; nxt <= n + 1 - j; ++nxt) {
              if (p * c[nxt - 1][k - 1] > t) break;
              (dp[i ^ 1][j + nxt][nxt - k][p * c[nxt - 1][k - 1]] +=
               dp[i][j][k][p]) %= MOD;
            }
            dp[i][j][k][p] = 0;
          }
  }
  cout << ans << endl;
  return 0;
}
