#include <bits/stdc++.h>
using namespace std;
const int mod = (int)1e9 + 7;
int c[101][101];
int get_c(int n, int k) {
  if (k > n || k < 0) return 0;
  if (n == k || k == 0) return 1;
  if (c[n][k] != 0) return c[n][k];
  return c[n][k] = ((get_c(n - 1, k - 1) + get_c(n - 1, k)) % mod);
}
long long mypow(long long x, long long n) {
  if (n == 0) return 1;
  long long y = mypow(x, n / 2);
  y = (y * y) % mod;
  return (n & 1) == 0 ? y : ((x * y) % mod);
}
int n, k;
long long m;
long long ans[5001];
long long old[5001];
long long cf[101];
int main() {
  srand(time(NULL));
  cin >> n >> m >> k;
  if (2 * k >= (n * n)) k = n * n - k;
  ans[k] = 1;
  for (int i = 0; i < ((int)(n + 1)); ++i) cf[i] = mypow(get_c(n, i), m / n);
  for (int i = n - 1; i >= 0; i--) {
    if (m % n == (i + 1) % n && (m % n) != 0)
      for (int j = 0; j < ((int)(n + 1)); ++j)
        cf[j] = mypow(get_c(n, j), m / n + 1);
    memcpy(old, ans, sizeof ans);
    memset(ans, 0, sizeof ans);
    for (int j = 0; j <= k; j++) {
      for (int now = 0; now <= n && now <= j; now++) {
        if (old[j] == 0) continue;
        ans[j - now] += old[j] * cf[now];
        ans[j - now] %= mod;
      }
    }
  }
  cout << ans[0] << endl;
  return 0;
}
