#include <bits/stdc++.h>
using namespace std;
const int mo = 1000000007, N = 105;
int c[N][N], f[2][N][N][N];
int n, m, k, ans;
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = (0); i <= (int)n; i++) c[i][0] = 1;
  for (int i = (1); i <= (int)n; i++)
    for (int j = (1); j <= (int)i; j++)
      c[i][j] = min(c[i - 1][j - 1] + c[i - 1][j], k + 1);
  for (int i = (1); i <= (int)n; i++) f[1][i][i][1] = 1;
  for (int i = (2); i <= (int)m; i++) {
    memset(f[i & 1], 0, sizeof(f[i & 1]));
    ;
    for (int v = (1); v <= (int)n; v++)
      for (int re = (1); re <= (int)v; re++)
        for (int way = (1); way <= (int)k; way++)
          for (int x = re; way * c[x - 1][x - re] <= k && x + v <= n; x++)
            (((f[i & 1][v + x][x - re][way * c[x - 1][x - re]]) +=
              (f[(i & 1) ^ 1][v][re][way])) >= mo
                 ? f[i & 1][v + x][x - re][way * c[x - 1][x - re]] -= mo
                 : 233);
    for (int v = (1); v <= (int)n; v++)
      for (int way = (1); way <= (int)k; way++)
        (((ans) += (f[i & 1][v][0][way])) >= mo ? ans -= mo : 233),
            f[i & 1][v][0][way] = 0;
    for (int j = (1); j <= (int)n; j++) f[i & 1][j][j][1]++;
  }
  printf("%d", ans);
}
