#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
long long modexp(long long a, long long pow, long long mod) {
  if (pow == 0) return 1;
  long long x = modexp(a, pow / 2, mod);
  x = (x * x) % mod;
  if (pow % 2) x = (x * a) % mod;
  return x;
}
long long n, m, k, p, q, r, s, t, x, y, fact[102], mult[102][3], dp[102][10009];
bool done[102][10009];
long long find(long long in, long long k) {
  long long mu;
  if (in == -1) {
    if (k == 0)
      return 1;
    else
      return 0;
  }
  if (done[in][k] == true) return dp[in][k];
  done[in][k] = true;
  for (int i = 0; i < 1 + min(k, n); ++i) {
    if ((m - in - 1) / n + 1 == m / n + 1)
      mu = mult[i][1];
    else
      mu = mult[i][0];
    dp[in][k] = (dp[in][k] + mu * find(in - 1, k - i)) % mod;
  }
  return dp[in][k];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n >> m >> k;
  fact[0] = 1;
  p = m / n + 1;
  q = m / n;
  for (int i = 1; i < 101; ++i) fact[i] = (i * fact[i - 1]) % mod;
  for (int i = 0; i < n + 1; ++i) {
    t = ((((fact[n] * modexp(fact[n - i], mod - 2, mod)) % mod) *
          modexp(fact[i], mod - 2, mod)) %
         mod);
    mult[i][1] = modexp(t, m / n + 1, mod);
    mult[i][0] = modexp(t, m / n, mod);
  }
  cout << find(n - 1, k) << "\n";
  return 0;
}
