// GPT-5.2 generated by the same idea on Python #include using namespace std; static constexpr int MOD = 10007; static long long mod_pow(long long a, long long e) { a %= MOD; long long r = 1; while (e > 0) { if (e & 1) r = (r * a) % MOD; a = (a * a) % MOD; e >>= 1; } return r; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int K, S, N; cin >> K >> S >> N; // Finv[k] = inverse(F_k) mod MOD, with F_0 = 1, F_1 = 1 vector Finv(max(0, K), 1); int F_pre = 1; int F_cur = 1; for (int i = 0; i < K - 2; i++) { int next = F_pre + F_cur; next %= MOD; F_pre = F_cur; F_cur = next; Finv[i + 2] = static_cast(mod_pow(F_cur, MOD - 2)); } vector A(N, 0); A[0] = S; if (N <= K) { for (int n = 0; n < N - 1; n++) { long long acc = 0; for (int k = 0; k <= n; k++) { acc += 1LL * A[n - k] * Finv[k]; } A[n + 1] = static_cast(acc % MOD); } } else { // N > K for (int n = 0; n < K; n++) { long long acc = 0; for (int k = 0; k <= n; k++) { acc += 1LL * A[n - k] * Finv[k]; } A[n + 1] = static_cast(acc % MOD); } for (int n = K; n < N - 1; n++) { long long acc = 0; for (int k = 0; k < K; k++) { acc += 1LL * A[n - k] * Finv[k]; } A[n + 1] = static_cast(acc % MOD); } } cout << A[N - 1] << "\n"; return 0; }