#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, -1, 1};
const int N = 110;
const int M = 10010;
long long n, m, k;
long long c[N][M];
long long c2[N][M][2];
long long mod = 1000000007LL;
long long powmod(long long b, long long e, long long mod) {
  if (!e) return 1;
  if (e & 1) return (b * powmod(b, e - 1, mod)) % mod;
  long long r = (powmod(b, e / 2, mod));
  return (r * r) % mod;
}
long long rest;
long long pd[N][N * N];
long long qnt;
long long func(long long at, long long bolas) {
  if (at == n) return (bolas == 0);
  if (pd[at][bolas] != -1) return pd[at][bolas];
  long long resp = 0;
  for (int i = 0; i <= min(bolas, n); i++) {
    resp += (c2[n][i][(at < rest)] * func(at + 1, bolas - i)) % mod;
    if (resp >= mod) resp -= mod;
  }
  return pd[at][bolas] = resp;
}
int main() {
  for (int i = 0; i < N; i++) c[0][0] = 1;
  for (int i = 1; i < N; i++)
    for (int j = 0; j <= i; j++) {
      if (j == 0 || j >= i)
        c[i][j] = 1;
      else
        c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
    }
  cin >> n >> m >> k;
  qnt = m / n;
  rest = m % n;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j < 2; j++) c2[n][i][j] = powmod(c[n][i], qnt + j, mod);
  memset(pd, -1, sizeof pd);
  long long resp = func(0, k);
  cout << resp << endl;
  return 0;
}
