#include <bits/stdc++.h>
using namespace std;
long long nck[101][101];
long long n, m, k;
long long dp[10001][100];
long long aux[101][100];
long long eleva(long long num, long long pot) {
  if (pot == 0) return 1;
  if (pot & 1) return (num * eleva(num, pot - 1)) % 1000000007;
  long long aux = eleva(num, pot / 2);
  return (aux * aux) % 1000000007;
}
void pre() {
  nck[0][0] = 1;
  for (int i = 1; i <= 100; ++i) {
    nck[i][0] = 1;
    for (int j = 1; j <= i; ++j)
      nck[i][j] = (nck[i - 1][j - 1] + nck[i - 1][j]) % 1000000007;
  }
  for (int p = 0; p < n; ++p) {
    for (int i = 0; i <= n; ++i) {
      long long num = m / n;
      if (m % n != 0) num += p + 1 <= (m % n);
      aux[p][i] = eleva(nck[n][i], num);
    }
  }
}
long long solve(int r, int p) {
  if (p == n) return r == 0;
  long long& res = dp[r][p];
  if (res != -1) return res;
  res = 0;
  int lim = min(r, (int)n);
  for (int i = 0; i <= lim; ++i) {
    res = (res + aux[p][i] * solve(r - i, p + 1)) % 1000000007;
  }
  return res;
}
int main() {
  cin >> n >> m >> k;
  pre();
  memset(dp, -1, sizeof dp);
  cout << solve(k, 0) << endl;
  return 0;
}
