#include <bits/stdc++.h>
namespace Work {
const int Mod = 1e9 + 7;
const int maxn = 110;
const int maxnn = 20010;
long long p[maxn][maxnn][2];
long long f[maxn][maxnn];
long long c[maxn][maxn];
int n, k;
long long m;
int min(int x, int y) { return x < y ? x : y; }
long long _pow(long long x, long long y) {
  long long ret = 1;
  for (; y; y >>= 1, x = (x * x) % Mod)
    if (y & 1) ret = ret * x % Mod;
  return ret;
}
void Main() {
  c[0][0] = 1;
  scanf("%d %I64d %d", &n, &m, &k);
  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 j = 0; j <= min(n, k); j++) {
      if (i <= tmp)
        p[i][j][0] = _pow(c[n][j], m / n + 1);
      else
        p[i][j][1] = _pow(c[n][j], 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 t = 0; t <= min(j, n); t++) {
        if (i <= tmp)
          f[i][j] = (f[i][j] + f[i - 1][j - t] * p[i][t][0] % Mod) % Mod;
        else
          f[i][j] = (f[i][j] + f[i - 1][j - t] * p[i][t][1]) % Mod;
      }
  printf("%I64d\n", f[n][k]);
}
}  // namespace Work
int main() {
  Work::Main();
  return 0;
}
