func_code_string: #include <bits/stdc++.h>   const int md = 1e9 + 7;   int n, k, m, M, c;   struct mat {     int A[256][256];     inline mat() { memset(A, 0, sizeof A); }     inline int* operator[](const int& x) { return A[x]; }     inline mat operator*(const mat& b) const {       mat c;       for (int i = 0; i <= M; ++i)         for (int k = 0; k <= M; ++k)           for (int j = 0; j <= M; ++j)             c[i][j] = (c[i][j] + (long long)A[i][k] * b.A[k][j]) % md;       return c;     }   } A, B;   inline void pow(mat a, int b) {     mat& ret = B;     ret[0][0] = 1;     for (; b; b >>= 1, a = a * a)       if (b & 1) ret = ret * a;   }   int main() {     scanf( %d%d%d , &n, &k, &m), M = (k + 1) << m, c = (1 << m) - 1;     for (int i = 0; i <= k; ++i) {       for (int j = 0; j <= c; ++j) A[i << m | j][i << m | ((j << 1) & c)] = 1;       if (i != k)         for (int j = 0; j <= c; ++j)           A[i << m | j][(i + 1) << m | ((j << 1 | 1) & c)] =               1 + __builtin_popcount(j);     }     pow(A, n);     int ans = 0;     for (int i = 0; i <= c; ++i) ans = (ans + B[0][k << m | i]) % md;     printf( %d , ans);     return 0;   }   