#include <bits/stdc++.h>
const double EPS = 1e-9;
const int INT_INF = 0x7FFFFFFF;
const long long I64_INF = 0x7FFFFFFFFFFFFFFF;
const double PI = acos(-1.0);
const long long MOD = (long long)1e9 + 7;
using namespace std;
long long c[110][110];
long long d[110][10010];
int n, k;
long long m;
long long POW[110];
long long POW1[110];
long long mmul(long long a, long long b) { return (a * b) % MOD; }
long long pow(long long a, long long p) {
  if (p == 0) return 1LL;
  long long res = 1LL;
  while (p > 0) {
    if (p & 1LL) res = (res * a) % MOD;
    a = mmul(a, a);
    p /= 2LL;
  }
  return res;
}
void add(long long& a, long long b) {
  a += b;
  while (a > MOD) a -= MOD;
}
int main() {
  cin >> n >> m >> k;
  for (int i = 0; i < (int)n + 1; i++) c[0][i] = 1, c[i][i] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j < i; j++) c[j][i] = (c[j - 1][i - 1] + c[j][i - 1]) % MOD;
  long long P = m / (1LL * n);
  P++;
  long long M = (m % (1LL * n));
  for (int i = 0; i < (int)n + 1; i++)
    POW[i] = pow(c[i][n], P), POW1[i] = pow(c[i][n], P - 1LL);
  for (int i = 0; i < (int)n + 1; i++)
    if (M != 0)
      d[1][i] = POW[i];
    else
      d[1][i] = POW1[i];
  for (int len = 2; len <= n; len++)
    for (int sum = 0; sum <= min(k, len * n); sum++) {
      d[len][sum] = 0;
      for (int last = 0; sum - last >= 0 && last <= n; last++)
        if (len <= M)
          add(d[len][sum], mmul(d[len - 1][sum - last], POW[last]));
        else
          add(d[len][sum], mmul(d[len - 1][sum - last], POW1[last]));
    }
  printf("%I64d\n", d[n][k]);
  return 0;
}
