#include <bits/stdc++.h>
using namespace std;
const long long MOD = (long long)1e9 + 7;
const long long N = 111;
long long n, m, q, r;
long long mp[N][N][2];
long long modPow(long long b, long long p) {
  b %= MOD;
  long long d = b * b % MOD;
  if (p == 0) return 1;
  if (p == 1) return b;
  if (p % 2 == 0) return modPow(d, p / 2);
  return b * modPow(d, p / 2) % MOD;
}
long long ncr[N][N];
long long nCr(long long a, long long b) {
  if (b > a) return 0;
  if (a == b or b == 0) return 1;
  if (ncr[a][b] != -1) return ncr[a][b];
  return ncr[a][b] = (nCr(a - 1, b - 1) + nCr(a - 1, b)) % MOD;
}
long long dp[N][10011];
long long f(long long i, long long k) {
  if (i == n) return k == 0;
  if (dp[i][k] != -1) return dp[i][k];
  long long res = 0;
  for (long long j = 0; j <= min(n, k); j++) {
    long long add = mp[n][j][i < r];
    res = (res + add * f(i + 1, k - j) % MOD) % MOD;
  }
  return dp[i][k] = res;
}
signed main() {
  memset(dp, -1, sizeof dp);
  memset(ncr, -1, sizeof ncr);
  long long k;
  cin >> n >> m >> k;
  q = m / n;
  r = m % n;
  for (long long i = 0; i <= n; i++) {
    for (long long j = 0; j <= n; j++) {
      mp[i][j][0] = modPow(nCr(i, j), q);
      mp[i][j][1] = modPow(nCr(i, j), q + 1);
    }
  }
  cout << f(0, k) << endl;
  return 0;
}
