#include <bits/stdc++.h>
using namespace std;
long long int n;
bool check[15000][150];
long long int dd[15000][150];
long long int c[150][150];
long long int po[150][150];
long long int cnt[150], mod = 1000000000 + 7;
long long int poww(long long int x, long long int k) {
  long long int s = 1;
  while (k > 0) {
    if (k & 1) s = (s * x) % mod;
    x = (x * x) % mod;
    k >>= 1;
  }
  return s;
}
long long int dp(long long int x, long long int k) {
  long long int i;
  if (k == 0) return 1;
  if (x > n) return 0;
  if (check[k][x] == true) return dd[k][x];
  long long int ans = 0;
  for (i = 0; i <= min(n, k); i++) {
    ans = (ans + po[i][x] * dp(x + 1, k - i)) % mod;
  }
  check[k][x] = true;
  return dd[k][x] = ans;
}
int main() {
  long long int m, k, i;
  scanf("%lld %lld %lld", &n, &m, &k);
  for (i = 0; i <= n; i++) c[0][i] = 1;
  for (i = 1; i <= n; i++)
    for (long long int j = 1; j <= n; j++) {
      c[i][j] = (c[i - 1][j - 1] + c[i][j - 1]) % mod;
    }
  long long int tmp = m / n;
  for (i = 1; i <= n; i++) {
    cnt[i] += m / n;
    if (m % n >= i) cnt[i]++;
  }
  for (i = 0; i <= n; i++)
    for (long long int j = 1; j <= n; j++) {
      po[i][j] = poww(c[i][n], cnt[j]);
    }
  printf("%lld", dp(1, k));
}
