#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int n, k;
long long m, sD[101][10001], d[101][10001], POW[101][101];
long long Pow(long long x, long long y) {
  if (y == 0) return 1;
  long long temp = Pow(x, y >> 1);
  if (y & 1) return temp * temp % MOD * x % MOD;
  return temp * temp % MOD;
}
long long sDp(int pos, int S) {
  if (S < 0) return 0;
  if (pos > n) {
    if (S == 0) return 1;
    return 0;
  }
  if (sD[pos][S] != -1) return sD[pos][S];
  return sD[pos][S] = (sDp(pos + 1, S - 1) + sDp(pos + 1, S)) % MOD;
}
long long dp(int pos, int S) {
  if (S > k) return 0;
  if (pos > n) {
    if (S == k) return 1;
    return 0;
  }
  long long &res = d[pos][S];
  if (res != -1) return res;
  res = 0;
  for (int i = 0; i <= n; ++i)
    res = (res + dp(pos + 1, S + i) * POW[pos][i] % MOD) % MOD;
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  memset(sD, -1, sizeof sD);
  memset(d, -1, sizeof d);
  cin >> n >> m >> k;
  for (int i = 1; i <= n; ++i) {
    for (int j = 0; j <= n; ++j) {
      if (m % n < i)
        POW[i][j] = Pow(sDp(1, j), m / n) % MOD;
      else
        POW[i][j] = Pow(sDp(1, j), (m / n) + 1) % MOD;
    }
  }
  cout << dp(1, 0);
  return 0;
}
