#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110, MOD = 1000000007;
long long n, m, k;
long long dp[MAXN][MAXN * MAXN], mem[MAXN][2];
int povrh[MAXN][MAXN];
long long pow(long long x, long long pot, long long i, long long j) {
  if (mem[i][j] != -1) return mem[i][j];
  long long a = x, b = 1;
  while (pot) {
    if (pot & 1) b = (b * a) % MOD;
    a = (a * a) % MOD;
    pot /= 2;
  }
  return mem[i][j] = b;
}
int main() {
  memset(mem, -1, sizeof mem);
  povrh[0][0] = 1;
  for (int i = 1; i < MAXN; ++i) {
    for (int j = 0; j < MAXN; ++j) {
      povrh[i][j] = povrh[i - 1][j];
      if (i) povrh[i][j] += povrh[i - 1][j - 1];
      if (povrh[i][j] >= MOD) povrh[i][j] -= MOD;
    }
  }
  scanf("%I64d%I64d%I64d", &n, &m, &k);
  dp[0][0] = 1;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j <= k; ++j) {
      if (!dp[i][j]) continue;
      for (int ii = 0; ii + j <= k && ii <= n; ++ii)
        dp[i + 1][j + ii] = (dp[i + 1][j + ii] +
                             dp[i][j] * pow(povrh[n][ii], m / n + (i < m % n),
                                            ii, (i < m % n))) %
                            MOD;
    }
  printf("%I64d\n", dp[n][k]);
  return 0;
}
