#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
double fRand(double fMin, double fMax) {
  double f = (double)rand() / RAND_MAX;
  return fMin + f * (fMax - fMin);
}
template <class T>
T min(T a, T b, T c) {
  return min(a, min(b, c));
}
template <class T>
T max(T a, T b, T c) {
  return max(a, max(b, c));
}
int power(int x, long long n) {
  if (n == 0) return 1;
  if (n & 1) return (1LL * x * power(x, n - 1)) % 1000000007;
  int p = power(x, n / 2);
  return (1LL * p * p) % 1000000007;
}
int n, k, c[105][105], dp[105][105 * 105];
long long m;
int main() {
  cin >> n >> m >> k;
  for (int i = (0); i <= (n); ++i) {
    c[i][0] = 1;
    for (int j = (1); j <= (i); ++j)
      c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % 1000000007;
  }
  dp[0][0] = 1;
  for (int i = (0); i <= (n - 1); ++i) {
    for (int x = (0); x <= (n); ++x) {
      long long p = power(c[n][x], (m - i + n - 1) / n);
      for (int j = (0); j <= (k - x); ++j)
        dp[i + 1][j + x] = (dp[i + 1][j + x] + 1LL * dp[i][j] * p) % 1000000007;
    }
  }
  printf("%d", dp[n][k]);
  return 0;
}
