#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110;
const int MAXK = 10010;
long long dp[MAXN][MAXK], C[MAXN][MAXN], Chi[MAXN][MAXN], Clo[MAXN][MAXN];
long long n, m, t;
long long modexp(long long x, long long e) {
  if (e == 0) return 1;
  if (e == 1) return x;
  long long rt = modexp(x, e / 2);
  if (e % 2 == 0) return (rt * rt) % 1000000007;
  return (((rt * rt) % 1000000007) * x) % 1000000007;
}
long long rec(int i, int j) {
  if (dp[i][j] >= 0) return dp[i][j];
  if (j - n * i > 0) return 0;
  long long& res = dp[i][j];
  res = 0;
  for (int k = 0; k <= n; k++) {
    long long add = 0;
    if (j - k >= 0) {
      if (((m - i) / n) == (m / n))
        add = (rec(i - 1, j - k) * Chi[n][k]) % 1000000007;
      else
        add = (rec(i - 1, j - k) * Clo[n][k]) % 1000000007;
    }
    res = (res + add) % 1000000007;
  }
  return res;
}
int main() {
  cin >> n >> m >> t;
  C[0][0] = C[1][0] = C[1][1] = 1;
  for (int i = 2; i < MAXN; 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]) % 1000000007;
  }
  for (int i = 0; i < MAXN; i++) {
    for (int j = 0; j <= i; j++) {
      Chi[i][j] = modexp(C[i][j], m / n + 1);
      Clo[i][j] = modexp(C[i][j], m / n);
    }
  }
  memset(dp, -1, sizeof dp);
  for (int j = 1; j < MAXK; j++) dp[0][j] = 0;
  dp[0][0] = 1;
  cout << rec(n, t) << "\n";
  return 0;
}
