#include <bits/stdc++.h>
using namespace std;
long long C[105][105], dp[2][105][105][105], n, m, k, ans, now;
long long add(long long x) { return x >= 1000000007 ? x - 1000000007 : x; }
int main() {
  scanf("%lld%lld%lld", &n, &m, &k);
  if (n == 1) {
    printf("0");
    return 0;
  }
  C[0][0] = 1;
  n++;
  for (long long i = 1; i <= n; i++) {
    C[i][0] = 1;
    for (long long t = 1; t <= i; t++)
      C[i][t] = add(C[i - 1][t - 1] + C[i - 1][t]);
  }
  dp[now][0][1][1] = 1;
  for (long long i = 0; i <= m; i++) {
    if (i) {
      long long qwq = 0;
      for (long long t = 2; t <= n; t++) {
        for (long long j = 1; j <= k; j++) {
          qwq = add(qwq + dp[now][t][0][j]);
        }
      }
      ans = (ans + qwq * (m - i + 1)) % 1000000007;
      if (i == m) break;
    }
    memset(dp[now ^ 1], 0, sizeof(dp[now ^ 1]));
    for (long long t = 0; t < n; t++) {
      for (long long j = 1; j + t <= n; j++) {
        for (long long s1 = 1; s1 <= k; s1++) {
          if (dp[now][t][j][s1]) {
            for (long long s2 = j; s2 + t <= n; s2++) {
              if (s1 * C[s2 - 1][j - 1] <= k)
                dp[now ^ 1][t + s2][s2 - j][s1 * C[s2 - 1][j - 1]] =
                    add(dp[now ^ 1][t + s2][s2 - j][s1 * C[s2 - 1][j - 1]] +
                        dp[now][t][j][s1]);
            }
          }
        }
      }
    }
    now ^= 1;
  }
  printf("%lld", ans);
}
