#include <bits/stdc++.h>
using namespace std;
long long dp[101][101 * 101], pow1[101], pow2[101];
long long mypow(long long x, long long y) {
  long long res = 1;
  while (y) {
    if (y & 1) {
      res *= x;
      res %= 1000000007;
    }
    x *= x;
    x %= 1000000007;
    y >>= 1;
  }
  return res;
}
int main() {
  int i, j, n, k, K;
  long long m;
  cin >> n >> m >> K;
  long long tmp = 1;
  for (i = 0; i <= n; i++) {
    pow1[i] = mypow(tmp, m / n);
    pow2[i] = mypow(tmp, m / n + 1);
    tmp *= n - i;
    tmp %= 1000000007;
    tmp *= mypow(i + 1, 1000000007 - 2);
    tmp %= 1000000007;
  }
  if (m % n == 0) {
    for (i = 0; i <= n; i++) dp[0][i] = pow1[i];
  } else {
    for (i = 0; i <= n; i++) dp[0][i] = pow2[i];
  }
  for (i = 1; i < n; i++) {
    int ni = min(n * (i + 1), K);
    for (j = 0; j <= ni; j++) {
      if (i < m % n) {
        for (k = 0; k <= j && k <= n; k++) {
          dp[i][j] += dp[i - 1][j - k] * pow2[k];
          dp[i][j] %= 1000000007;
        }
      } else {
        for (k = 0; k <= j && k <= n; k++) {
          dp[i][j] += dp[i - 1][j - k] * pow1[k];
          dp[i][j] %= 1000000007;
        }
      }
    }
  }
  long long res = 0;
  cout << dp[n - 1][K] << endl;
  return 0;
}
