#include <bits/stdc++.h>
using namespace std;
long long dyn[1002][1002];
int yesinitial = 1;
long long combination(long long people, long long need,
                      long long modu = 1000000007LL * 1000000007LL) {
  if (yesinitial) {
    for (int(i) = 0; (i) < (1002); ++(i))
      for (int(j) = 0; (j) < (1002); ++(j)) dyn[i][j] = -1LL;
    yesinitial = 0;
  }
  if (dyn[people][need] != -1LL) return dyn[people][need];
  if (need == 0) return 1LL;
  if (people == need) return 1LL;
  if (people < need) return 0LL;
  dyn[people][need] = combination(people - 1, need, modu) +
                      combination(people - 1, need - 1, modu);
  dyn[people][need] %= modu;
  return dyn[people][need];
}
long long Power(long long number, long long exponent, long long ivalue) {
  long long ret = 1;
  long long multiplier = number;
  while (exponent > 0LL) {
    if (exponent % 2LL) {
      ret = (ret * multiplier) % ivalue;
    }
    exponent /= 2LL;
    multiplier = (multiplier * multiplier) % ivalue;
  }
  return ret;
}
long long modu = 1000000007LL;
long long dp[102][10200];
long long combin[102];
long long dpl[10200];
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  dp[0][0] = 1LL;
  for (int(i) = 0; (i) < (n); ++(i)) {
    long long pangkat = 1LL + (m - (long long)i - 1LL) / n;
    for (int(j) = 0; (j) < (n + 1); ++(j))
      combin[j] = Power(combination(n, j, modu), pangkat, modu);
    for (int(j) = 0; (j) < (k + 1); ++(j))
      for (int(ambil) = 0; (ambil) < (n + 1); ++(ambil))
        if (j + ambil <= k) {
          dp[i + 1][j + ambil] += (combin[ambil] * dp[i][j]) % modu;
          dp[i + 1][j + ambil] %= modu;
        }
  }
  cout << dp[n][k] << endl;
}
