#include <bits/stdc++.h>
using namespace std;
int n, k;
long long m;
int c[110], cc[110][2];
long long tim[110];
long long f[110][10100];
int sqr(long long x) { return (x * x) % 1000000007; }
int qming(long long a, long long b) {
  if (!b) return 1;
  if (b & 1) return (sqr(qming(a, b / 2)) * a) % 1000000007;
  return sqr(qming(a, b / 2));
}
void init() {
  c[0] = 1;
  for (int i = 1; i <= n; i++) {
    long long temp = c[i - 1];
    temp *= (n - i + 1);
    temp %= 1000000007;
    temp *= qming(i, 1000000007 - 2);
    temp %= 1000000007;
    c[i] = temp;
  }
}
int main() {
  cin >> n >> m >> k;
  init();
  for (int i = 0; i < n; i++)
    if (m % n > i)
      tim[i] = 1;
    else
      tim[i] = 0;
  for (int i = 0; i <= n; i++)
    cc[i][0] = qming(c[i], m / n), cc[i][1] = qming(c[i], m / n + 1);
  f[0][0] = 1;
  int a, b;
  for (int i = 0; i < n; i++) {
    a = max(0, k - (n - i) * n);
    b = min(k, n * i);
    for (int j = a; j <= b; j++)
      for (int t = 0; t <= n; t++) {
        if (j + t > k) break;
        f[i + 1][j + t] += f[i][j] * cc[t][tim[i]];
        f[i + 1][j + t] %= 1000000007;
      }
  }
  cout << f[n][k] << endl;
  return 0;
}
