#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7, nmax = 1e2 + 5;
long long m;
int n, k;
int dp[nmax][nmax * nmax];
int mem[nmax][nmax];
int rec(int n_, int points) {
  if (points < 0) return 0;
  if (points == 0) return 1;
  if (n_ == 0) return 0;
  if (dp[n_][points] != -1) return dp[n_][points];
  int ans = 0;
  for (int i = 0; i <= n; i++)
    ans = (ans + 1LL * mem[i][n_] * rec(n_ - 1, points - i)) % mod;
  dp[n_][points] = ans;
  return ans;
}
int C_mem[nmax][nmax];
int C(int p_, int q_) {
  if (q_ == 0 || q_ == p_) return 1;
  if (C_mem[p_][q_] != -1) return C_mem[p_][q_];
  C_mem[p_][q_] = (C(p_ - 1, q_ - 1) + C(p_ - 1, q_)) % mod;
  return C_mem[p_][q_];
}
long long my_pow(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b % 2 == 1) ret = ret * a % mod;
    a = a * a % mod;
    b = b / 2;
  }
  return ret;
}
int main() {
  memset(C_mem, -1, sizeof(C_mem));
  memset(dp, -1, sizeof(dp));
  cin >> n >> m >> k;
  for (int po = 0; po <= n; po++)
    for (int i = 1; i <= n; i++) mem[po][i] = my_pow(C(n, po), (m - i) / n + 1);
  cout << rec(n, k) << endl;
  return 0;
}
