#include <bits/stdc++.h>
using namespace std;
long long pow(long long a, long long b, long long c) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans = (ans * a) % c;
    a = (a * a) % c;
    b >>= 1;
  }
  return ans;
}
long long F[100 + 5], C[100 + 5][100 + 5];
bool used[100 + 5][100 * 100 + 5];
long long memo[100 + 5][100 * 100 + 5];
long long factor[100 + 5][100 + 5];
int n;
long long dp(int pos, int cur) {
  if (pos == n) return cur == 0;
  if (used[pos][cur]) return memo[pos][cur];
  used[pos][cur] = 1;
  long long &dev = memo[pos][cur] = 0;
  for (int r = 0; r <= n; ++r)
    if (cur - r >= 0)
      dev = (dev + factor[r][pos] * dp(pos + 1, cur - r)) % 1000000007LL;
  return dev;
}
int main() {
  for (int i = 0; i <= 100; ++i) C[i][i] = C[i][0] = 1;
  for (int i = 2; i <= 100; ++i)
    for (int j = 1; j < i; ++j) {
      C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
      if (C[i][j] >= 1000000007LL) C[i][j] -= 1000000007LL;
    }
  long long m, K;
  while (cin >> n >> m >> K) {
    for (int i = 0; i < n; i++) F[i] = m / n;
    for (int i = 0; i < m % n; i++) F[i]++;
    memset(used, 0, sizeof(used));
    for (int r = 0; r <= n; ++r)
      for (int pos = 0; pos < n; ++pos)
        factor[r][pos] = pow(C[n][r], F[pos], 1000000007LL);
    cout << dp(0, K) << '\n';
  }
}
