#include <bits/stdc++.h>
using namespace std;
long long n, m, k;
long long mod = 1000000007LL;
long long F[101][10001];
long long PRE[101][101][101];
long long getNumber(long long index) {
  long long t = m / n;
  if (index < m % n) return t + 1;
  return t;
}
long long power(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = (ret * a) % mod;
    a = (a * a) % mod;
    b /= 2;
  }
  return ret;
}
long long C[101][101];
long long dp(int cur, int already) {
  if (already > k) return 0;
  if (cur == n) {
    if (already != k) return 0;
    return 1;
  }
  long long &ret = F[cur][already];
  if (ret != -1) return ret;
  ret = 0;
  for (int i = 0; i <= n; i++) {
    ret += PRE[n][i][cur] * dp(cur + 1, already + i);
    ret %= mod;
  }
  return ret;
}
int MAIN() {
  memset(C, 0, sizeof(C));
  for (int i = 0; i <= 100; i++) {
    C[i][0] = C[i][i] = 1;
    for (int j = 1; j < i; j++) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;
  }
  while (cin >> n >> m >> k) {
    memset(F, 0xff, sizeof(F));
    for (int i = 0; i <= 100; i++)
      for (int j = 0; j <= 100; j++)
        for (int kk = 0; kk < n; kk++)
          PRE[i][j][kk] = power(C[i][j], getNumber(kk));
    cout << dp(0, 0) << endl;
  }
  return 0;
}
int main() {
  ios ::sync_with_stdio(false);
  cout << fixed << setprecision(16);
  return MAIN();
}
