#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
long long a[101];
long long b[101];
long long dp[101][10001];
long long comb[101][101];
bool mark[101][10001];
void Calculate_Combinations(void) {
  for (long long i = 0; i <= n; i++) comb[i][0] = 1;
  for (long long j = 1; j <= n; j++)
    for (long long i = j; i <= n; i++)
      comb[i][j] = (comb[i - 1][j - 1] + comb[i - 1][j]) % 1000000007;
}
long long Calculate_Pow(long long x, long long y) {
  long long z = 1LL;
  long long t = x;
  for (long long i = 1; i <= y; i <<= 1, t = (t * t) % 1000000007)
    if (y & i) z = (z * t) % 1000000007;
  return z;
}
long long f(long long i, long long sum) {
  if (i == n + 1) return 1;
  if (sum == 0) return 1;
  if (mark[i][sum]) return dp[i][sum];
  mark[i][sum] = true;
  long long maxj = min(n, sum);
  long long minj = max(0LL, sum - n * (n - i));
  for (long long j = minj; j <= maxj; j++) {
    long long x;
    if (i <= m % n)
      x = b[j];
    else
      x = a[j];
    dp[i][sum] =
        (dp[i][sum] + (f(i + 1, sum - j) * x) % 1000000007) % 1000000007;
  }
  return dp[i][sum];
}
int main() {
  scanf("%I64d%I64d%I64d", &n, &m, &k);
  Calculate_Combinations();
  for (long long i = 0; i <= n; i++) {
    a[i] = Calculate_Pow(comb[n][i], m / n);
    b[i] = Calculate_Pow(comb[n][i], m / n + 1);
  }
  printf("%I64d\n", f(1, k));
  return 0;
}
