#include <bits/stdc++.h>
using namespace std;
template <class _T>
inline _T sqr(const _T& x) {
  return x * x;
}
template <class _T>
inline string tostr(const _T& a) {
  ostringstream os("");
  os << a;
  return os.str();
}
const long double PI = 3.1415926535897932384626433832795L;
const long double EPS = 1e-11;
char TEMPORARY_CHAR;
const long long INF = 1e17;
const int N = 1 << 16;
inline void input(int& a) {
  a = 0;
  while (((TEMPORARY_CHAR = getchar()) > '9' || TEMPORARY_CHAR < '0') &&
         (TEMPORARY_CHAR != '-')) {
  }
  char neg = 0;
  if (TEMPORARY_CHAR == '-') {
    neg = 1;
    TEMPORARY_CHAR = getchar();
  }
  while (TEMPORARY_CHAR <= '9' && TEMPORARY_CHAR >= '0') {
    a = (a << 3) + (a << 1) + TEMPORARY_CHAR - '0';
    TEMPORARY_CHAR = getchar();
  }
  if (neg) a = -a;
}
inline int nxt() {
  int(ret);
  input((ret));
  ;
  return ret;
}
long long mod = 1000000007;
long long pw(int a, long long n) {
  if (n == 0) return 1;
  long long ret = pw(a, n >> 1ll);
  ret *= ret;
  ret %= mod;
  if (n & 1ll) ret *= a;
  ret %= mod;
  return ret;
}
long long kol[101];
int main() {
  long long b[101][101];
  memset((b), 0, sizeof(b));
  for (int i = 0; i < (int)(101); i++) b[i][0] = 1;
  for (int i = (1); i <= (int)(100); i++)
    for (int j = (1); j <= (int)(i); j++) {
      b[i][j] = b[i - 1][j] + b[i - 1][j - 1];
      if (b[i][j] >= mod) b[i][j] -= mod;
    }
  int(n);
  input((n));
  ;
  long long m;
  cin >> m;
  int(k);
  input((k));
  ;
  long long dp[10001];
  memset((dp), 0, sizeof(dp));
  dp[0] = 1;
  for (int i = 0; i < (int)(n); i++) kol[i] = (m / n) + ((m % n) > i);
  for (int i = 0; i < (int)(n); i++) {
    long long tmp[10001];
    long long c[10001];
    memset((tmp), 0, sizeof(tmp));
    for (int j = 0; j < (int)(n + 1); j++) c[j] = pw(b[n][j], kol[i]);
    for (int j = 0; j < (int)(k + 1); j++) {
      for (int p = 0; p < (int)(n + 1); p++)
        if (p <= j) tmp[j] += (c[p] * dp[j - p]) % mod;
      tmp[j] %= mod;
    }
    for (int j = 0; j < (int)(k + 1); j++) dp[j] = tmp[j];
  }
  cout << dp[k];
  return 0;
}
