#include <bits/stdc++.h>
using namespace std;
const long long LINF = ~(((long long)0x1) << 63) / 2;
const int INF = 0X3F3F3F3F;
const double eps = 1e-7;
const long long MOD = 1000000007;
long long dp[2][11111];
long long c[110][110];
long long t[2][11111];
long long solve(long long a, long long p) {
  long long ans = 1;
  while (p) {
    if (p & 1) ans *= a;
    a = a * a;
    p >>= 1;
    ans %= MOD;
    a %= MOD;
  }
  return ans;
}
int main() {
  long long n, m;
  int k;
  cin >> n >> m >> k;
  long long a = 1, b = 1;
  for (int i = 0; i <= 100; i++)
    for (int j = 0; j <= i; j++) {
      if (j == 0)
        c[i][j] = 1;
      else
        c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % MOD;
    }
  for (int i = 0; i <= n; i++) {
    t[0][i] = solve(c[n][i], m / n);
    t[1][i] = (t[0][i] * c[n][i]) % MOD;
  }
  dp[0][0] = 1;
  int e = 0;
  for (int i = 0; i < n; i++) {
    e ^= 1;
    for (int j = 0; j <= k; j++) dp[e][j] = 0;
    for (int j = k; j >= 0; j--)
      if (dp[e ^ 1][j]) {
        for (int r = 0; r <= n && r + j <= k; r++) {
          long long now = 1;
          if (i < m % n)
            now = t[1][r];
          else
            now = t[0][r];
          dp[e][j + r] = (dp[e][j + r] + (dp[e ^ 1][j] * now) % MOD) % MOD;
        }
      }
  }
  cout << dp[e][k] << endl;
  return 0;
}
