#include <bits/stdc++.h>
using namespace std;
namespace WorkSpace {
const int Mod = 1e9 + 7;
long long F[110][110 * 110];
long long C[110][110];
long long P[110][110 * 110][2];
long long Pow(long long A, long long B) {
  long long ret = 1;
  while (B) {
    if ((B % 2)) ret = ((ret % Mod) * (A % Mod)) % Mod;
    A = ((A % Mod) * (A % Mod)) % Mod;
    B = B >> 1;
  }
  return ret;
}
void Main() {
  int N, K;
  long long M;
  scanf("%d%lld%d", &N, &M, &K);
  C[0][0] = 1;
  for (int i = 1; i <= 100; ++i) {
    C[i][0] = 1;
    for (int j = 1; j <= i; ++j) {
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % Mod;
    }
  }
  int tmp = M % N;
  for (int i = 1; i <= N; ++i) {
    for (int s = 0; s <= K; ++s) {
      if (i <= tmp)
        P[i][s][0] = Pow(C[N][s], M / N + 1);
      else
        P[i][s][1] = Pow(C[N][s], M / N);
    }
  }
  for (int i = 0; i <= N; ++i) F[i][0] = 1;
  for (int i = 1; i <= N; ++i) {
    for (int j = 1; j <= K; ++j) {
      for (int k = 0; k <= min(j, N); ++k) {
        if (i <= tmp) {
          F[i][j] = (F[i][j] + F[i - 1][j - k] * P[i][k][0] % Mod) % Mod;
        } else {
          F[i][j] = (F[i][j] + F[i - 1][j - k] * P[i][k][1]) % Mod;
        }
      }
    }
  }
  printf("%lld\n", F[N][K]);
}
}  // namespace WorkSpace
int main() {
  WorkSpace ::Main();
  return 0;
}
