#include <bits/stdc++.h>
using namespace std;
const int jt = 1000000007;
int n, m, k;
int ans;
int C[105][105];
int dp[2][105][105][105];
void inline Add(int &a, int b) {
  a += b;
  if (a >= jt) {
    a -= jt;
  }
}
int main() {
  cin >> n >> m >> k;
  C[0][0] = 1;
  for (int i = 1; i <= n; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      C[i][j] = min(k + 1, C[i - 1][j] + C[i - 1][j - 1]);
    }
  }
  int now = 1, lst = 0;
  dp[0][0][1][1] = 1;
  for (int i = 0; i < m; i++) {
    for (int j = 0; j <= n; j++) {
      for (int f = 1; f <= n; f++) {
        for (int s = 1; s <= k; s++) {
          if (!dp[lst][j][f][s]) {
            continue;
          }
          for (int l = f; l <= n - j; l++) {
            if (s * C[l - 1][f - 1] <= k) {
              Add(dp[now][j + l][l - f + (!j)][s * C[l - 1][f - 1]],
                  dp[lst][j][f][s]);
            } else {
              break;
            }
          }
        }
      }
    }
    for (int j = 0; j <= n; j++) {
      for (int f = 0; f <= n; f++) {
        for (int s = 1; s <= k; s++) {
          dp[lst][j][f][s] = 0;
          if (!f) {
            Add(ans, dp[now][j][0][s]);
          }
        }
      }
    }
    Add(dp[now][0][1][1], 1);
    swap(now, lst);
  }
  cout << ans << endl;
  return 0;
}
