#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 100 + 7, MAXK = 100 * 100 + 7,
                mod = 1000 * 1000 * 1000 + 7;
long long dp[MAXN][MAXK], c[MAXN][MAXN], cc[MAXN][MAXN], n, m, k;
long long pwr(long long x, long long y) {
  if (y == 0) return 1;
  long long ret = pwr(x, y / 2);
  if (y % 2 == 0) return (ret * ret) % mod;
  return (((ret * ret) % mod) * x) % mod;
}
long long fnd(int x, int y) {
  if (y == 0 || x == y) return (c[x][y] = 1);
  if (c[x][y] != -1) return c[x][y];
  return (c[x][y] = (fnd(x - 1, y - 1) + fnd(x - 1, y)) % mod);
}
int main() {
  cin >> n >> m >> k;
  memset(c, -1, sizeof c);
  for (int i = 0; i <= n; i++) {
    fnd(n, i);
  }
  for (int i = 0; i <= n; i++) cc[n][i] = pwr(c[n][i], m / n);
  int tt = m % n;
  dp[0][0] = 1;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= k; j++)
      for (int t = 0; t <= n; t++)
        if (j >= t) {
          dp[i][j] +=
              (dp[i - 1][j - t] *
               (((n - i) >= tt) ? (cc[n][t]) : ((cc[n][t] * c[n][t]) % mod))) %
              mod;
          dp[i][j] %= mod;
        }
  cout << dp[n][k] << endl;
  return 0;
}
