#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int N = 102;
int n, m, K;
int c[N][N];
int g[N][N];
int f[2][N][N][N];
inline void upd(int &a, int b) { (a += b) %= mod; }
int main() {
  scanf("%d%d%d", &n, &m, &K);
  for (int i = 0, _ = n; i <= _; i++) {
    g[i][0] = 1;
    if (i)
      for (int j = 1, _ = n; j <= _; j++)
        for (int k = 0, _ = j; k <= _; k++) {
          g[i][j] += g[i - 1][k];
          g[i][j] = min(g[i][j], K * 2);
        }
  }
  int cur = 0, nxt = 1;
  int ans = 0;
  f[0][0][0][1] = 1;
  for (int r = 1, _ = m; r <= _; r++) {
    memset(f[nxt], 0, sizeof f[nxt]);
    upd(f[nxt][0][0][1], 1);
    for (int i = 0, _ = n; i <= _; i++)
      for (int j = 0, _ = i; j <= _; j++)
        for (int k = 1, _ = K; k <= _; k++)
          if (f[cur][i][j][k]) {
            int tmp = f[cur][i][j][k];
            if (j) upd(ans, tmp);
            if (r == m) continue;
            for (int d = 1; i + 2 * d <= n; d++) {
              int x = j ? g[j][d] : 1;
              if (k * x <= K) {
                assert(k * x >= 0);
                upd(f[nxt][i + d * 2][d][k * x], tmp);
              }
            }
          }
    swap(cur, nxt);
  }
  printf("%d\n", ans);
}
