#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007, maxn = 110;
int n, k, mat[maxn], fact[maxn], dp[maxn][maxn * maxn], stup[maxn][maxn];
long long m;
int pot(int a, long long b) {
  if (!b) {
    return 1;
  }
  if (b == 1) {
    return a;
  }
  int rek, ost;
  rek = pot(a, b >> 1);
  ost = pot(a, b & 1);
  return ((((long long)rek * rek) % mod) * (long long)ost) % mod;
}
int rek(int cur, int ost) {
  if (!ost) {
    return dp[cur][ost] = 1;
  }
  if (cur >= n || ost < 0) {
    return 0;
  }
  if (dp[cur][ost] != -1) {
    return dp[cur][ost];
  }
  dp[cur][ost] = 0;
  for (int i = 0; i <= min(n, ost); i++) {
    dp[cur][ost] += ((long long)stup[cur][i] * rek(cur + 1, ost - i)) % mod;
    if (dp[cur][ost] >= mod) {
      dp[cur][ost] -= mod;
    }
  }
  return dp[cur][ost];
}
int main(void) {
  scanf("%d", &n);
  cin >> m;
  scanf("%d", &k);
  fact[0] = 1;
  for (int i = 1; i <= n; i++) {
    fact[i] = ((long long)fact[i - 1] * i) % mod;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= n; j++) {
      stup[i][j] =
          pot(((long long)fact[n] *
               pot(((long long)fact[j] * fact[n - j]) % mod, mod - 2)) %
                  mod,
              (m - i - 1) / n + 1);
    }
  }
  memset(dp, -1, sizeof dp);
  printf("%d\n", rek(0, k));
  return 0;
}
