#include <bits/stdc++.h>
long long z = 1e9 + 7;
long long t, n, k;
long long binpow(long long a, long long b) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) {
      res = res * a;
      res %= z;
    }
    a = a * a;
    a %= z;
    b >>= 1;
  }
  return res;
}
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long m;
  cin >> n >> m >> k;
  long long c[101][101], c1[101][101];
  for (int i = 0; i < 101; i++) {
    c[i][0] = 1;
    c1[i][0] = 1;
  }
  for (int i = 0; i < 101; i++) {
    c[0][i] = 0;
    c1[0][i] = 0;
  }
  c1[0][0] = 1;
  c[0][0] = 1;
  for (int i = 1; i < 101; i++) {
    for (int j = 1; j < 101; j++) {
      c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
      c[i][j] %= z;
      long long val = (m - 1) / n;
      c1[i][j] = binpow(c[i][j], val);
    }
  }
  long long sol[101][10001];
  for (int j = 0; j <= n; j++) {
    long long xx = c1[n][j];
    long long x2 = m % n;
    x2--;
    if (x2 < 0) {
      x2 += n;
    }
    if (x2 >= n - 1) {
      xx *= c[n][j];
      xx %= z;
    }
    sol[n - 1][j] = xx;
  }
  for (int j = n + 1; j <= k; j++) {
    sol[n - 1][j] = 0;
  }
  for (int i = n - 2; i >= 0; i--) {
    for (int j = 0; j <= k; j++) {
      sol[i][j] = 0;
      for (int l = 0; l <= min((int)n, j); l++) {
        long long xx = c1[n][l];
        long long x2 = (m - 1) % n;
        if (x2 >= i) {
          xx *= c[n][l];
          xx %= z;
        }
        long long x1 = xx * sol[i + 1][j - l];
        x1 %= z;
        sol[i][j] += x1;
        sol[i][j] %= z;
      }
    }
  }
  long long ans = sol[0][k];
  cout << ans << endl;
  return 0;
}
