#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105, Mo = int(1e9) + 7;
int C[MAXN * 2][MAXN * 2];
int F[MAXN][MAXN / 2][MAXN / 2][MAXN], N, M, K;
int main() {
  scanf("%d%d%d", &N, &M, &K);
  for (int i = 1, n = 200; i <= n; i++) C[i][0] = C[0][i] = 1;
  for (int i = 1, n = 200; i <= n; i++)
    for (int j = 1; j <= i; j++)
      C[i][j] = min(C[i - 1][j - 1] + C[i - 1][j], 200);
  F[1][1][1][1] = 1;
  int ans = 0;
  for (int n = 1; n <= N + 1; n++)
    if (n & 1)
      for (int l = 1; l * 2 - 1 <= n && l <= M; l++)
        for (int c = 1; c <= n / 2 + 1; c++)
          for (int k = 1; k <= K; k++) {
            int v = F[n][l][c][k];
            if (!v) continue;
            if (n > 1) ans = (ans + v * 1ll * (M - l + 1) % Mo) % Mo;
            if (l < M)
              for (int x = 1; n + 2 * x <= N + 1; x++) {
                int nk = k * C[x + c - 1][c - 1];
                if (nk > K) continue;
                (F[n + 2 * x][l + 1][x][nk] += v) %= Mo;
              }
          }
  printf("%d\n", ans);
  return 0;
}
