#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
int n, K;
long long m;
int dp[103][10100];
int C[103][103];
int dp2[103][103];
const int rem = 1000000007;
int f(int a, long long q) {
  if (!q) return 1;
  if (q % 2) return ((long long)f(a, q - 1) * a) % rem;
  int res = f(a, q / 2);
  return ((long long)res * res) % rem;
}
int main() {
  for (int i = 0; i < 103; i++) {
    C[i][0] = C[i][i] = 1;
    for (int j = 1; j < i; j++) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % rem;
  }
  cin >> n >> m >> K;
  dp[n + 1][0] = 1;
  for (int i = 0; i <= n; i++)
    for (int j = 1; j <= n; j++) dp2[i][j] = f(C[n][i], (m - j) / n + 1ll);
  for (int i = n; i >= 1; i--) {
    int mc = (n - i + 1) * n;
    for (int j = 0; j <= mc; j++) {
      for (int k = 0; k <= min(j, n); k++) {
        dp[i][j] =
            (((long long)dp[i + 1][j - k] * dp2[k][i]) % rem + dp[i][j]) % rem;
      }
    }
  }
  cout << dp[1][K] << endl;
  return 0;
}
