#include <bits/stdc++.h>
using namespace std;
template <typename Tp>
inline void read(Tp &x) {
  static char c;
  static bool neg;
  x = 0, c = getchar(), neg = false;
  for (; !isdigit(c); c = getchar()) {
    if (c == '-') {
      neg = true;
    }
  }
  for (; isdigit(c); c = getchar()) {
    x = x * 10 + c - '0';
  }
  if (neg) {
    x = -x;
  }
}
const int N = 100 + 5;
const int MOD = 1e9 + 7;
const int PHI = MOD - 1;
inline int power(int base, int exp) {
  int res = 1;
  while (exp > 0) {
    if (exp & 1) {
      res = (long long)res * base % MOD;
    }
    base = (long long)base * base % MOD;
    exp >>= 1;
  }
  return res;
}
inline int inc(int &x, const int &y) {
  x += y;
  if (x >= MOD) {
    x -= MOD;
  } else if (x < 0) {
    x += MOD;
  }
  return x;
}
inline int sum(const int &x, const int &y) {
  int res = x + y;
  if (res >= MOD) {
    res -= MOD;
  } else if (res < 0) {
    res += MOD;
  }
  return res;
}
int C[N][N];
inline void init() {
  for (int i = 0; i < N; ++i) {
    C[i][0] = C[i][i] = 1;
  }
  for (int i = 1; i < N; ++i) {
    for (int j = 1; j < i; ++j) {
      C[i][j] = sum(C[i - 1][j], C[i - 1][j - 1]);
    }
  }
}
int n, k;
long long m;
int f[N][N * N];
int main() {
  init();
  read(n), read(m), read(k);
  f[0][0] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int k = 0; k <= n; ++k) {
      for (int j = 0,
               x = power(C[n][k],
                         ((long long)(m - i) / (long long)n + 1LL) % PHI);
           j <= ::k - k; ++j) {
        inc(f[i][j + k], (long long)f[i - 1][j] * x % MOD);
      }
    }
  }
  printf("%d\n", f[n][k]);
}
