#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double PI = 3.14159265358;
const int inf = (int)1e9;
const int MAX_N = 100 * 1000 + 100;
const int rem = (int)(1e9) + 7;
long long n, m, k;
long long mymod;
long long comb[300][300];
long long dp[111][20000];
long long my_pow[300][300];
bool visit[111][20000];
long long get_comb(int i, int j) {
  if (i == j || j == 0) return comb[i][j] = 1;
  if (j > i) return comb[i][j] = 0;
  if (comb[i][j] != -1) return comb[i][j];
  comb[i][j] = (get_comb(i - 1, j - 1) + get_comb(i - 1, j)) % rem;
  return comb[i][j];
}
long long pp(long long i, long long j) {
  if (j == 0) return 1LL;
  if (j == 1) return i;
  int mmod = j % 2;
  j /= 2;
  long long cur = pp(i, j);
  cur *= cur;
  cur %= rem;
  if (mmod) cur *= i;
  cur %= rem;
  return cur;
}
long long rec(long long idx, long long rest) {
  if (idx == n) {
    if (rest == 0)
      return 1;
    else
      return 0;
  }
  if (visit[idx][rest]) return dp[idx][rest];
  visit[idx][rest] = 1;
  long long &ref = dp[idx][rest];
  ref = 0;
  for (long long i = 0; i <= n && i <= rest; i++) {
    ref += my_pow[idx][i] * rec(idx + 1, rest - i);
    ref %= rem;
  }
  return ref;
}
int main() {
  cin >> n >> m >> k;
  memset(comb, -1, sizeof(comb));
  for (int i = 0; i <= n; i++) {
    get_comb(n, i);
  }
  mymod = m % n;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= n; j++) {
      long long cc = comb[n][j];
      long long ppow = (m / n) + (i < mymod ? 1 : 0);
      cc = pp(cc, ppow);
      my_pow[i][j] = cc;
    }
  }
  long long ans = rec(0, k);
  cout << ans << endl;
  return 0;
}
