#include <bits/stdc++.h>
using namespace std;
int rd() { return RAND_MAX == 32767 ? ((rand() << 15) ^ rand()) : rand(); }
const int md = 1000000007;
int f[110][10010], c[110][110], d[110][110][2];
int Power(int a, long long n) {
  int res = 1;
  for (; n; n >>= 1) {
    if (n & 1) res = (long long)res * a % md;
    a = (long long)a * a % md;
  }
  return res;
}
int main() {
  int n, K;
  long long m;
  cin >> n >> m >> K;
  memset(c, 0, sizeof(c));
  for (int i = 0; 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]) % md;
  }
  for (int i = 0; i <= 100; i++)
    for (int j = 0; j <= i; j++) {
      d[i][j][0] = Power(c[i][j], (m - 1) / n + 1);
      d[i][j][1] = Power(c[i][j], (m - n) / n + 1);
    }
  memset(f, 0, sizeof(f));
  f[0][0] = 1;
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= i * n; j++)
      for (int k = 0; k <= n; k++)
        if ((m - i - 1) / n + 1 == (m - 1) / n + 1)
          f[i + 1][j + k] =
              ((long long)f[i][j] * d[n][k][0] + f[i + 1][j + k]) % md;
        else
          f[i + 1][j + k] =
              ((long long)f[i][j] * d[n][k][1] + f[i + 1][j + k]) % md;
  cout << f[n][K] << endl;
  return 0;
}
