#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 110, MD = 1000000007;
int n, tot;
long long m;
long long c[MAX_N][MAX_N], mi[MAX_N], dp[MAX_N][MAX_N * MAX_N];
long long qmi(long long x, long long n) {
  long long now = 1;
  while (n) {
    if (n & 1) {
      now *= x;
      now %= MD;
    }
    x *= x;
    x %= MD;
    n >>= 1;
  }
  return now;
}
void init() {
  long long tmp;
  cin >> n >> m >> tot;
  tmp = (long long)m / n;
  for (int i = 0; i != n + 1; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % MD;
    }
    c[i][i] = 1;
  }
  for (int i = 0; i != n + 1; i++) {
    mi[i] = qmi(c[n][i], tmp);
  }
}
void done() {
  int start = 0, end = 0;
  long long tmp_ans;
  dp[0][0] = 1;
  for (int i = 1; i != n + 1; i++) {
    for (int j = start; j != end + 1; j++) {
      for (int k = 0; k != n + 1; k++) {
        if (j + k > tot) {
          break;
        }
        tmp_ans = (i <= m % n) ? c[n][k] : 1;
        tmp_ans = (tmp_ans * mi[k]) % MD;
        tmp_ans = (tmp_ans * dp[i - 1][j]) % MD;
        dp[i][j + k] = (dp[i][j + k] + tmp_ans) % MD;
      }
    }
    end = (i * n <= tot) ? i * n : tot;
    start = tot - (n - i) * n;
    if (start < 0) {
      start = 0;
    }
  }
  cout << dp[n][tot] << endl;
}
int main() {
  init();
  done();
  return 0;
}
