#include <bits/stdc++.h>
using namespace std;
long long N, M, K;
long long _C[110][110];
void init() {
  for (int i = 0; i < 110; ++i) {
    _C[i][0] = _C[i][i] = 1;
    for (int j = 1; j < i; ++j) {
      _C[i][j] = _C[i - 1][j] + _C[i - 1][j - 1];
      if (_C[i][j] >= 1000000007) _C[i][j] -= 1000000007;
    }
  }
}
long long POW(long long w, long long step) {
  long long ret = 1;
  for (; step > 0; step >>= 1, w = (w * w) % 1000000007)
    if (step & 1) ret = (ret * w) % 1000000007;
  return ret;
}
long long dp[110][10010];
long long take[110];
int main() {
  init();
  cin >> N >> M >> K;
  dp[0][0] = 1;
  for (int i = 1; i <= N; ++i) {
    long long cnt = M / N;
    if (M % N >= i) ++cnt;
    for (int I = 0; I <= N; ++I) take[I] = POW(_C[N][I], cnt);
    for (int ALL = 0; ALL <= K; ++ALL) {
      int MAX = min((long long)ALL, N);
      long long& T = dp[i][ALL];
      for (int cur = 0; cur <= MAX; ++cur)
        T = (T + dp[i - 1][ALL - cur] * take[cur]) % 1000000007;
    }
  }
  cout << dp[N][K] << '\n';
  return 0;
}
