#include <bits/stdc++.h>
using namespace std;
const int Mod = 1000000007;
void update(int &a, int b) {
  a += b;
  if (a >= Mod) a -= Mod;
}
int C[222][222];
int n, m, k;
int dp[2][105][105][105];
int main() {
  for (int i = 0; i < 201; i++) C[0][i] = 0, C[i][0] = 1;
  for (int i = 1; i <= 200; i++) {
    for (int j = 1; j <= 200; j++) {
      C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
      if (C[i][j] > 200) C[i][j] = 202;
    }
  }
  ios::sync_with_stdio(false);
  cin >> n >> m >> k;
  long long ans = 0;
  for (int mx = 1; mx <= m; mx++) {
    int now = mx & 1, nxt = (mx + 1) & 1;
    memset(dp[nxt], 0, sizeof(dp[nxt]));
    for (int cntmx = 1; cntmx * 2 <= n; cntmx++) {
      if (mx < m) ans++;
      dp[nxt][cntmx + cntmx][cntmx][1] = 1;
    }
    for (int cntmx = 1; cntmx <= n; cntmx++) {
      for (int x = 1; x <= n; x++) {
        if (C[cntmx + x - 1][x] > k) break;
        int cntgoodlmt = k / C[cntmx + x - 1][x];
        for (int cntgood = 1; cntgood <= cntgoodlmt; cntgood++) {
          int nxtcntgood = cntgood * C[cntmx + x - 1][x];
          int lenxx = cntmx + 1 + x + x;
          for (int len = cntmx + 1; lenxx <= n; len++, lenxx++) {
            if (!dp[now][len][cntmx][cntgood]) continue;
            if (mx < m) ans += dp[now][len][cntmx][cntgood];
            update(dp[nxt][lenxx][x][nxtcntgood], dp[now][len][cntmx][cntgood]);
          }
        }
      }
    }
    ans %= Mod;
  }
  cout << ans << endl;
  return 0;
}
