#include <bits/stdc++.h>
using namespace std;
int n, m, h, now;
int c[110][110];
int f[2][110][110][110];
int ans;
const int MOD = 1e9 + 7;
inline int mo(int x) {
  if (x >= MOD) return x - MOD;
  return x;
}
int main() {
  scanf("%d%d%d", &n, &m, &h);
  for (int i = 0; i <= n; i++) c[i][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
      c[i][j] = min(h + 1, c[i - 1][j - 1] + c[i - 1][j]);
  f[0][0][1][1] = 1;
  n++;
  for (int i = 1; i <= m; i++) {
    now = 1 - now;
    memset(f[now], 0, sizeof(f[now]));
    for (int j = 0; j <= n; j++)
      for (int k = 1; j + k <= n; k++)
        for (int w = 1; w <= h; w++)
          if (f[1 - now][j][k][w]) {
            for (int t = k; t <= n - j; t++)
              if (w * c[t - 1][k - 1] <= h)
                f[now][j + t][t - k][w * c[t - 1][k - 1]] =
                    mo(f[now][j + t][t - k][w * c[t - 1][k - 1]] +
                       f[1 - now][j][k][w]);
          }
    for (int j = 2; j <= n; j++)
      for (int k = 1; k <= h; k++)
        ans = mo(ans + 1ll * f[now][j][0][k] * (m - i + 1) % MOD);
  }
  printf("%d\n", ans);
}
