#include <bits/stdc++.h>
using namespace std;
inline void read(int &x) {
  char c;
  int f = 1;
  while (!isdigit(c = getchar()))
    if (c == '-') f = -1;
  x = (c & 15);
  while (isdigit(c = getchar())) x = (x << 1) + (x << 3) + (c & 15);
  x *= f;
}
const int mod = 1e9 + 7;
int n, m, p, i, j, k, l, x, fac[105], inv[105], fi[105], dp[55][55][55][105],
    ans;
int c(int x, int y) { return 1ll * fac[x] * fi[y] % mod * fi[x - y] % mod; }
int main() {
  {
    fac[0] = fac[1] = inv[1] = fi[0] = fi[1] = 1;
    for ((i) = (2); (i) <= (100); (i)++) {
      fac[i] = 1ll * fac[i - 1] * i % mod;
      inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
      fi[i] = 1ll * fi[i - 1] * inv[i] % mod;
    }
  }
  read(n);
  read(m);
  read(p);
  n /= 2;
  for ((i) = 1; (i) <= (n); (i)++) dp[i][i][1][1] = 1;
  for ((i) = 1; (i) <= (n); (i)++) {
    for ((j) = 1; (j) <= (n); (j)++) {
      for ((k) = 1; (k) <= (min(n, m)); (k)++) {
        for ((l) = 1; (l) <= (p); (l)++) {
          if (!dp[i][j][k][l]) continue;
          ans = (ans + 1ll * (m - k) * dp[i][j][k][l]) % mod;
          for ((x) = (n - i); (x) >= 1; (x)--) {
            if (1ll * l * c(j + x - 1, x) <= p) {
              {
                dp[i + x][x][k + 1][l * c(j + x - 1, x)] += (dp[i][j][k][l]);
                if (dp[i + x][x][k + 1][l * c(j + x - 1, x)] >= mod)
                  dp[i + x][x][k + 1][l * c(j + x - 1, x)] -= mod;
              }
            }
          }
        }
      }
    }
  }
  cout << ans << endl;
  return 0;
}
