#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
int pow(int a, long long n) {
  int ret = 1;
  while (n) {
    if (n & 1) ret = ret * (long long)a % mod;
    a = a * (long long)a % mod;
    n /= 2;
  }
  return ret;
}
int C[110][110];
int P[110][110];
int dp[110][11000];
int main() {
  for (int i = (0); i < (110); i++) {
    C[i][0] = 1;
    for (int j = (1); j < (i + 1); j++) {
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
    }
  }
  int n, k;
  long long m;
  while (cin >> n >> m >> k) {
    for (int i = (0); i < (110); i++) {
      for (int j = (0); j < (110); j++) P[i][j] = pow(C[i][j], m / n);
    }
    memset(dp, 0, sizeof(dp));
    dp[0][0] = 1;
    int yu = m % n;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j <= k; j++)
        if (dp[i][j]) {
          if (k - j > (n - i) * n) continue;
          for (int x = 0; x <= n; x++)
            if (j + x <= k) {
              int tmp = 1;
              if (i + 1 <= yu) tmp = C[n][x];
              dp[i + 1][j + x] = (dp[i + 1][j + x] +
                                  dp[i][j] * (long long)P[n][x] % mod * tmp) %
                                 mod;
            }
        }
    }
    cout << dp[n][k] << endl;
  }
}
