func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class TAT>   void read(TAT &a) {     static char cc;     static bool fff;     while (((cc = getchar()) <  0  || cc >  9 ) && cc !=  - )       ;     if (cc ==  - )       fff = 1, a = 0;     else       fff = 0, a = cc - 48;     while ((cc = getchar()) >=  0  && cc <=  9 ) a = a * 10 + cc - 48;     if (fff) a = -a;   }   template <class TAT>   void write(TAT a) {     static char cc[25];     static int ct;     if (a == 0) {       putchar( 0 );       return;     }     if (a < 0) {       putchar( - );       a = -a;     }     ct = 0;     while (a) {       cc[++ct] = a % 10 + 48;       a /= 10;     }     while (ct) {       putchar(cc[ct--]);     }   }   void begin() {     freopen( input.txt ,  r , stdin);     freopen( output.txt ,  w , stdout);   }   void end() {     fclose(stdin);     fclose(stdout);   }   template <class TAT>   void Ckmin(TAT &a, const TAT &b) {     if (a > b) a = b;   }   template <class TAT>   void Ckmax(TAT &a, const TAT &b) {     if (a < b) a = b;   }   const int mod = 1000000007;   const int maxn = 105;   const int maxm = 10005;   long long n, m, K;   long long C[maxn][maxn] = {0};   long long F[maxn][maxm] = {0};   long long P[maxn] = {0};   void Init() { read(n), read(m), read(K); }   int Pow(long long x, long long y) {     long long S = 1;     while (y) {       if (y & 1) S = (S * x) % mod;       x = (x * x) % mod;       y >>= 1;     }     return S;   }   void Prepare() {     const int N = 101;     register int i, j, k;     C[0][0] = 1;     for (i = 1; i <= N; ++i) {       C[i][0] = 1;       for (j = 1; j <= i; ++j) {         C[i][j] =             ((C[i][j - 1] * Pow(j, mod - 2)) % mod * (long long)(i - j + 1)) %             mod;       }     }   }   void Solve() {     register int i, j, k;     memset(F, 0, sizeof(F));     F[0][0] = 1;     for (i = 1; i <= n; ++i) {       for (j = 0; j <= n; ++j) P[j] = Pow(C[n][j], (m + n - i) / n) % mod;       for (j = 0; j <= K; ++j) {         for (k = j; k <= K && k <= j + n; ++k) {           F[i][k] = (F[i][k] + F[i - 1][j] * P[k - j]) % mod;         }       }     }     write(F[n][K]);     putchar(  n );   }   int main() {     Init();     Prepare();     Solve();     return 0;   }   