#include <bits/stdc++.h>
using namespace std;
long long int n, m, k;
long long int bin[120][120][2];
long long int num;
long long int memo[105][105 * 105];
long long int expo(long long int a, long long int b,
                   long long int m = 1000000007LL) {
  long long int y = a;
  long long int x = 1;
  while (b > 0) {
    if (b & 1) x = (x * y) % 1000000007LL;
    y = (y * y) % 1000000007LL;
    b = b >> 1;
  }
  return x;
}
int main() {
  scanf("%lld %lld %lld", &n, &m, &k);
  num = m / n;
  for (int i = 0; i < n + 1; i++) {
    bin[i][0][0] = 1;
    bin[i][0][1] = 1;
    bin[i][i][0] = 1;
    bin[i][i][1] = 1;
    for (int j = 1; j < i; j++) {
      bin[i][j][0] = bin[i][j][1] =
          (bin[i - 1][j][0] + bin[i - 1][j - 1][0]) % 1000000007LL;
    }
  }
  for (int i = 0; i < n + 1; i++) {
    bin[n][i][0] = expo(bin[n][i][0], num, 1000000007LL);
    bin[n][i][1] = expo(bin[n][i][1], num + 1, 1000000007LL);
  }
  for (int i = 0; i < k + 1; i++) memo[n][i] = 0LL;
  memo[n][0] = 1LL;
  long long int mm = m % n;
  for (int i = n - 1; i >= 0; i--) {
    for (int j = 0; j <= k && j <= n * (n - i); j++) {
      memo[i][j] = 0LL;
      for (int a = 0; a <= j && a <= n; a++) {
        long long int y =
            (memo[i + 1][j - a] * (mm > i ? bin[n][a][1] : bin[n][a][0])) %
            1000000007LL;
        memo[i][j] = (memo[i][j] + y) % 1000000007LL;
      }
    }
  }
  printf("%lld\n", memo[0][k]);
  return 0;
}
