#include <bits/stdc++.h>
int DP[1 + 100][1 + 10000];
inline int add(int a, int b) { return (a + b) % 1000000007; }
inline int mul(int a, int b) { return (int)(((long long)a * b) % 1000000007); }
int pow(int a, long long b) {
  int ret;
  if (b == 0) return 1;
  ret = pow(mul(a, a), b / 2);
  if (b % 2) ret = mul(ret, a);
  return ret;
}
int main() {
  int n, K, C[1 + 100][1 + 100], POW[1 + 100][1 + 100];
  long long m, CNT[1 + 100];
  scanf("%d%I64d%d", &n, &m, &K);
  for (int i = 1; i <= n; i++) {
    C[i][0] = 1;
    for (int j = 1; j < i; j++) C[i][j] = add(C[i - 1][j], C[i - 1][j - 1]);
    C[i][i] = 1;
  }
  for (int i = 1; i <= n; i++) {
    CNT[i] = m / n;
    if (i <= m % n) CNT[i]++;
  }
  for (int i = 0; i <= n; i++)
    for (int j = 1; j <= n; j++) POW[i][j] = pow(C[n][i], CNT[j]);
  DP[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= K; j++)
      for (int k = 0; k <= n && k <= j; k++)
        DP[i][j] = add(DP[i][j], mul(DP[i - 1][j - k], POW[k][i]));
  printf("%d\n", DP[n][K]);
  return 0;
}
