#include <bits/stdc++.h>
using namespace std;
void Get(int &T) {
  char C;
  bool F = 0;
  for (; C = getchar(), C < '0' || C > '9';)
    if (C == '-') F = 1;
  for (T = C - '0'; C = getchar(), C >= '0' && C <= '9'; T = T * 10 + C - '0')
    ;
  F && (T = -T);
}
int N, M, K;
void Init() {
  Get(N);
  Get(M);
  Get(K);
  N++;
}
int C[1005][1005];
int F[55][105][55][105];
long long Ans;
void Work() {
  C[0][0] = 1;
  for (int i = 1; i <= 1000; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= 1000; j++)
      C[i][j] = std::min(C[i - 1][j] + C[i - 1][j - 1], 1000);
  }
  F[0][0][1][1] = 1;
  for (int i = 0; i <= M && i + i <= N + 1; i++)
    for (int j = 0; j <= N; j++)
      for (int k = 1; k + k <= N; k++)
        for (int p = 1; p <= K; p++) {
          if (F[i][j][k][p])
            for (int delta = k; j + delta <= N && delta - k + delta - k <= N;
                 delta++)
              if (C[delta - 1][k - 1] * p <= K)
                (F[i + 1][j + delta][delta - k][C[delta - 1][k - 1] * p] +=
                 F[i][j][k][p]) %= (1000000007);
        }
  for (int i = 2; i <= M && i + i <= N + 1; i++)
    for (int j = 0; j <= N; j++)
      for (int k = 0; k <= 0; k++)
        for (int p = 0; p <= K; p++) {
          long long Ans0 = F[i][j][k][p];
          if (Ans0 > 0) {
            (Ans0 *= (M - i + 1)) %= (1000000007);
            (Ans += Ans0) %= (1000000007);
          }
        }
}
void Output() { printf("%I64d\n", Ans); }
int main() {
  Init();
  Work();
  Output();
  return 0;
}
