#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
const long long sz = 101;
long long fac[sz];
long long inv[sz];
long long fpow(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) {
      ans *= a;
      ans %= mod;
    }
    a *= a;
    a %= mod;
    b >>= 1;
  }
  return ans;
}
long long combo(long long n, long long r) {
  if (n < r) {
    return 0;
  }
  return (((fac[n] * inv[r]) % mod) * inv[n - r]) % mod;
}
void precomp(long long n) {
  fac[0] = 1;
  for (long long i = 1; i <= n; i++) {
    fac[i] = (fac[i - 1] * i) % mod;
  }
  inv[0] = 1;
  for (long long i = 1; i <= n; i++) {
    inv[i] = fpow(fac[i], mod - 2);
  }
}
long long dp[101][10001];
long long dp2[101][101];
long long solve2(long long &n, long long i, long long j, long long &m) {
  if (dp2[i][j] != -1) {
    return dp2[i][j];
  }
  long long te = m / n;
  if (i < m % n) {
    te++;
  }
  return dp2[i][j] = fpow(combo(n, j), te);
}
long long solve(long long i, long long sum, long long &n, long long &m) {
  if (i == n && sum == 0) {
    return 1;
  }
  if (i == n || sum < 0 || (n - i) * n < sum) {
    return 0;
  }
  if (dp[i][sum] != -1) {
    return dp[i][sum];
  }
  long long ans = 0;
  for (long long j = 0; j <= n; j++) {
    ans += solve2(n, i, j, m) * solve(i + 1, sum - j, n, m);
    ans %= mod;
  }
  return dp[i][sum] = ans;
}
signed main() {
  precomp(sz - 1);
  long long n, m, k;
  cin >> n >> m >> k;
  long long ans = 0;
  memset(dp, -1, sizeof(dp));
  memset(dp2, -1, sizeof(dp2));
  cout << solve(0, k, n, m);
  return 0;
}
