#include <bits/stdc++.h>
using namespace std;
int n, k;
long long f[111][11111], c[111][111], m, p[111][111], q[111][111];
long long pow(long long a, long long b) {
  if (b == 0) return 1;
  long long tmp = pow(a, b / 2);
  tmp = (tmp * tmp) % 1000000007;
  if (b & 1) tmp = (tmp * a) % 1000000007;
  return tmp;
}
void add(long long &a, long long b) { a = (a + b) % 1000000007; }
int main() {
  cin >> n >> m >> k;
  long long t = m / n;
  c[0][0] = 1;
  for (int i = 1; i <= 100; i++) {
    c[i][0] = 1;
    p[i][0] = 1;
    q[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % 1000000007;
      p[i][j] = pow(c[i][j], t + 1);
      q[i][j] = pow(c[i][j], t);
    }
  }
  f[0][0] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= k; j++)
      if (j <= i * n)
        for (int x = 0; x <= n; x++)
          if (i < (m % n))
            add(f[i + 1][j + x], f[i][j] * p[n][x]);
          else
            add(f[i + 1][j + x], f[i][j] * q[n][x]);
  }
  cout << f[n][k] << endl;
  return 0;
}
