#include <bits/stdc++.h>
using namespace std;
long long int em(long long int x, long long int Mod, long long int n) {
  if (n == 0)
    return 1ll;
  else if (n % 2 == 0)
    return em((x % Mod * x % Mod) % Mod, Mod, n / 2) % Mod;
  else
    return (x % Mod * em((x % Mod * x % Mod) % Mod, Mod, (n - 1) / 2)) % Mod;
}
long long int fact[100004], inv[100004];
void pre() {
  fact[0] = 1;
  long long int i;
  for (long long int i = (long long int)1; i < (long long int)10009; i++)
    fact[i] = (fact[i - 1] * i) % 1000000007;
  inv[0] = 1;
  for (long long int i = (long long int)1; i < (long long int)10009; i++) {
    long long int r1 = em(i, 1000000007, 1000000007 - 2);
    inv[i] = (inv[i - 1] * r1) % 1000000007;
  }
}
long long int dp[103][10003];
long long int ways[103][103];
int32_t main() {
  std::ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int n, m, k, i, j, l;
  cin >> n >> m >> k;
  pre();
  dp[0][0] = 1;
  for (long long int i = (long long int)1; i < (long long int)n + 1; i++) {
    for (long long int j = (long long int)0; j < (long long int)n + 1; j++) {
      long long int here =
          ((fact[n] * inv[j]) % 1000000007 * inv[n - j]) % 1000000007;
      ways[i][j] = em(here, 1000000007, ((m - i) / n) + 1ll) % 1000000007;
    }
  }
  for (long long int i = (long long int)1; i < (long long int)n + 1; i++) {
    for (long long int l = (long long int)0; l < (long long int)k + 1; l++) {
      for (long long int j = (long long int)0; j < (long long int)n + 1; j++) {
        if (j <= l) {
          dp[i][l] = dp[i][l] + (dp[i - 1][l - j] * ways[i][j]) % 1000000007;
          dp[i][l] %= 1000000007;
        }
      }
    }
  }
  cout << dp[n][k];
}
