#include <bits/stdc++.h>
using namespace std;
int ncr[100 + 1][100 + 1], dp2[100 + 1][100 + 1][100 + 1];
int dp[100 + 1][100 * 100 + 1];
unsigned long long freq[100 + 1];
void pre() {
  for (int i = 0; i <= 100; i++) {
    ncr[i][0] = 1;
    for (int j = 1; j <= i; j++)
      ncr[i][j] = (ncr[i - 1][j] + ncr[i - 1][j - 1]) % 1000000007;
  }
}
int powmod(unsigned long long b, unsigned long long p) {
  unsigned long long ans = 1;
  while (p) {
    if (p & 1) ans = (ans * b) % 1000000007;
    b = (b * b) % 1000000007;
    p /= 2;
  }
  return ans;
}
int main() {
  pre();
  int N, K;
  unsigned long long M;
  cin >> N >> M >> K;
  unsigned long long t = M / N;
  for (int i = 1; i <= N; i++) {
    freq[i] = t;
    unsigned long long tst = t * N + i;
    if (tst <= M) freq[i]++;
  }
  for (int i = 0; i <= N; i++) {
    for (int j = 0; j <= i; j++) {
      for (int k = 1; k <= N; k++) dp2[i][j][k] = powmod(ncr[i][j], freq[k]);
    }
  }
  for (int i = 0; i <= min(K, N); i++) dp[1][i] = dp2[N][i][1];
  for (int i = 2; i <= N; i++) {
    for (int j = 0; j <= K; j++) {
      dp[i][j] = 0;
      for (int k = 0; k <= min(j, N); k++) {
        unsigned long long tst =
            ((unsigned long long)dp2[N][k][i] * dp[i - 1][j - k]) % 1000000007;
        dp[i][j] += tst;
        if (dp[i][j] >= 1000000007) dp[i][j] -= 1000000007;
      }
    }
  }
  printf("%d\n", dp[N][K]);
  return 0;
}
