#include <bits/stdc++.h>
using namespace std;
int n, m, K, ans;
int f[2][110][110][110];
int C[110 << 1][110 << 1];
void update(int &a, int b) { (a += b) %= 1000000007; }
int calc(int m, int n) { return C[m + n - 1][m - 1]; }
int main() {
  for (int i = 0; i < 110 << 1; ++i) C[i][0] = 1;
  for (int i = 1; i < 110 << 1; ++i)
    for (int j = 1; j <= i; ++j)
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % 1000000007;
  scanf("%d%d%d", &n, &m, &K);
  for (int i = 1; i <= n + 1; ++i) f[1][i][i - 1][1] = 1;
  for (int j = 1; j <= m; ++j) {
    int cur = j % 2;
    memset(f[cur ^ 1], 0, sizeof(f[cur ^ 1]));
    for (int i = 1; i <= n + 1; ++i) {
      if (i >= 2)
        for (int k = 1; k <= K; ++k)
          update(ans, (long long)f[cur][i][0][k] * (m - j + 1) % 1000000007);
      for (int k = 1; k < i; ++k) {
        for (int l = 1; l <= K; ++l)
          if (f[cur][i][k][l]) {
            for (int w = k; i + w <= n + 1; ++w) {
              int t = l * calc(k, w - k);
              if (t > K) break;
              update(f[cur ^ 1][i + w][w - k][t], f[cur][i][k][l]);
            }
          }
      }
    }
  }
  printf("%d\n", ans);
  return 0;
}
