#include <bits/stdc++.h>
using namespace std;
const int MAXN = 101;
long long cnt[MAXN], d[MAXN][(MAXN) * (MAXN)], M[MAXN][MAXN], M1[MAXN][MAXN];
const long long B7 = 1000 * 1000 * 1000 + 7;
inline long long C(long long n, long long k) {
  if (M[n][k] != -1) return M[n][k];
  long long ans = 0;
  if (!k)
    ans = 1;
  else if (!n)
    ans = 0;
  else if (n == k)
    ans = 1;
  else
    ans = (C(n - 1, k - 1) + C(n - 1, k)) % B7;
  M[n][k] = ans;
  return M[n][k];
}
long long binpow(long long a, long long p) {
  long long ans = 1;
  for (; p; p >>= 1, a = (a * a) % B7)
    if (p & 1) ans = (ans * a) % B7;
  return ans;
}
inline long long F(long long n, long long t, long long i) {
  if (M1[t][i] != -1) return M1[t][i];
  return M1[t][i] = binpow(C(n, t), cnt[i]);
}
long long solve(long long n, long long m, long long k) {
  long long rem = (m - 1) % n, div = (m - 1) / n;
  for (int i = 0; i < n; i++) cnt[i] = i <= rem ? div + 1 : div;
  for (int i = 0; i <= min(n, k); i++) d[0][i] = F(n, i, 0);
  for (int i = 1; i < n; i++)
    for (int j = 0; j <= k; j++)
      for (int t = 0; t <= min(n, k - j); t++)
        d[i][j + t] = (F(n, t, i) * d[i - 1][j] + d[i][j + t]) % B7;
  return d[n - 1][k];
}
int main() {
  ;
  long long n = 0, m = 0, k = 0;
  scanf("%I64d%I64d%I64d", &n, &m, &k);
  for (int i = 0; i <= n; i++)
    memset(M[i], -1, sizeof(M[i])), memset(M1[i], -1, sizeof(M1[i]));
  printf("%I64d\n", solve(n, m, k));
  ;
  return 0;
}
