#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110;
const int MOD = 1e9 + 7;
long long n, m, k, ente[MAXN][MAXN];
long long dp[MAXN][MAXN * MAXN];
long long pre[MAXN];
long long po(long long v, long long u) {
  return u ? (po(v * v % MOD, u >> 1) * (u & 1 ? v : 1) % MOD) : 1;
}
void add(long long& v, long long u) { v = (v + u) % MOD; }
int main() {
  ios::sync_with_stdio(0);
  for (int i = 0; i <= 100; i++) {
    ente[0][i] = ente[i][i] = 1;
    for (int j = 1; j < i; j++)
      ente[j][i] = (ente[j][i - 1] + ente[j - 1][i - 1]) % MOD;
  }
  cin >> n >> m >> k;
  long long alpha = m / n;
  long long beta = m % n;
  for (int i = 0; i <= n; i++) pre[i] = po(ente[i][n], alpha);
  dp[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= k; j++)
      for (int z = 0; z <= min((long long)j, n); z++)
        add(dp[i][j], (dp[i - 1][j - z] * pre[z] % MOD) *
                          (i <= beta ? ente[z][n] : 1) % MOD);
  cout << dp[n][k] << endl;
  return 0;
}
