#include <bits/stdc++.h>
using namespace std;
const int P = 1000000007;
int n, m, lm, c[110][110], f[2][110][110][110];
inline void add(int &x, int y) {
  x += y;
  if (x >= P) x -= P;
}
int main() {
  scanf("%d%d%d", &n, &m, &lm);
  for (int i = 0; i <= n; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= n; j++) {
      c[i][j] = c[i - 1][j - 1] + c[i - 1][j];
      if (c[i][j] > lm) c[i][j] = lm + 1;
    }
  }
  int ans = 0;
  for (int v = 1; v <= m; v++) {
    int rv = v & 1;
    int rv2 = rv ^ 1;
    for (int k = 1; k <= n; k++) f[rv][k][k][1] = 1;
    for (int i = 1; i <= n; i++) {
      for (int g = 1; i + g <= n; g++) {
        for (int l = 1; l <= lm; l++) {
          if (f[rv2][i][g][l] != 0) {
            add(ans, f[rv2][i][g][l]);
            for (int k = g; i + k <= n; k++) {
              int w = c[k - 1][g - 1];
              if (l * w > lm) break;
              add(f[rv][i + k][k - g][l * w], f[rv2][i][g][l]);
            }
            f[rv2][i][g][l] = 0;
          }
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
