#include <bits/stdc++.h>
using namespace std;
long long C[1111][1111], s[1111][1111];
long long f[111][10005];
long long pow_big(long long n, long long k) {
  if (k == 0) return 1;
  long long tmp = pow_big(n, k / 2);
  long long res = (tmp * tmp) % 1000000007;
  if (k % 2 == 1) res = (res * n) % 1000000007;
  return res;
}
void build_nCk(int n, long long m) {
  C[0][0] = 1;
  for (int j = 1, _b = n; j <= _b; j++) {
    C[0][j] = 1;
    for (int i = 1, _b = n; i <= _b; i++)
      C[i][j] = (C[i - 1][j - 1] + C[i][j - 1]) % 1000000007;
  }
  for (int i = 0, _b = n; i <= _b; i++)
    for (int k = 0, _b = n; k <= _b; k++) {
      long long tmp = m / n;
      if (m % n >= i) tmp++;
      s[i][k] = pow_big(C[k][n], tmp);
    }
}
void process_dp(int n, long long m, int k) {
  f[0][0] = 1;
  for (int i = 1, _b = n; i <= _b; i++)
    for (int j = 0, _b = k; j <= _b; j++)
      for (int t = 0, _b = n; t <= _b; t++)
        if (j >= t) {
          long long tmp = (f[i - 1][j - t] * s[i][t]) % 1000000007;
          f[i][j] = (f[i][j] + tmp) % 1000000007;
        }
  cout << f[n][k] << endl;
}
int main() {
  int n, k;
  long long m;
  cin >> n >> m >> k;
  build_nCk(n, m);
  process_dp(n, m, k);
  return 0;
}
