#include <bits/stdc++.h>
using namespace std;
const int maxN = 100 + 5;
const long long maxM = 1000000000000000005LL;
const int maxK = maxN * maxN;
const int maxBinaLen = 50;
const long long mod = 1000000007;
long long N, M, K, f[maxN][maxK], c[maxN][maxN], times, limit,
    powerArr[maxN][2];
bool bina[maxBinaLen];
int binaLen;
long long power(long long a, long long b) {
  for (binaLen = 0; b; b >>= 1) bina[++binaLen] = b & 1;
  long long ans = 1;
  for (int i = binaLen; i; --i) {
    ans *= ans;
    ans %= mod;
    if (bina[i]) ans *= a, ans %= mod;
  }
  return ans;
}
int main() {
  cin >> N >> M >> K;
  times = M / N;
  limit = M % N;
  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] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
  }
  for (int i = 0; i <= N; ++i) {
    powerArr[i][0] = power(c[N][i], times);
    powerArr[i][1] = (powerArr[i][0] * c[N][i]) % mod;
  }
  f[0][0] = 1;
  for (int i = 1; i <= N; ++i) {
    for (int j = 0; j <= min(K, i * N); ++j) {
      f[i][j] = 0;
      for (int now = max((long long)0, j - (i - 1) * N);
           now <= min((long long)j, N); ++now) {
        int prev = j - now;
        f[i][j] += f[i - 1][prev] * powerArr[now][i <= limit ? 1 : 0];
        f[i][j] %= mod;
      }
    }
  }
  cout << f[N][K] << endl;
  return 0;
}
