#include <bits/stdc++.h>
using namespace std;
long long C[550][550];
int n, m, k;
long long dp[2][110][110][110];
int main() {
  C[0][0] = 1;
  for (int i = 1; i < 550; i++) {
    C[i][0] = C[i][i] = 1;
    for (int j = 1; j < i; j++) {
      C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
      if (C[i][j] >= 1000000007) C[i][j] -= 1000000007;
    }
  }
  cin >> n >> m >> k;
  int p = 0, q = 1;
  long long ans = 0;
  for (int x = 1; x * 2 <= n; x++) dp[p][x][2 * x][1] = 1;
  for (int i = 2; i <= m; i++) {
    memset(dp[q], 0, sizeof(dp[q]));
    for (int j = 1; j <= n; j++)
      for (int s = j; s <= n; s++)
        for (int t = 1; t <= k; t++) {
          if (!dp[p][j][s][t]) continue;
          ans += (m - i + 1) * 1ll * dp[p][j][s][t] % 1000000007;
          if (ans >= 1000000007) ans -= 1000000007;
          for (int x = 1; s + 2 * x <= n && t * C[j + x - 1][x] <= k; x++) {
            dp[q][x][s + 2 * x][t * C[j + x - 1][x]] += dp[p][j][s][t];
            if (dp[q][x][s + 2 * x][t * C[j + x - 1][x]] >= 1000000007)
              dp[q][x][s + 2 * x][t * C[j + x - 1][x]] -= 1000000007;
          }
        }
    swap(p, q);
  }
  printf("%lld\n", ans);
  return 0;
}
