use proconio::input; fn main() { input! { k: usize, // K日前までの総和 s: usize, // 初項 n: usize, // 調べる日数 } // 重みを事前計算 let mut fibo = vec![0; n+9]; fibo[0] = 1; fibo[1] = 1; for i in 0..n { fibo[i+2] = mod_add(fibo[i], fibo[i+1]); } // { // for i in 0..=n { // println!("{}", fibo[i]); // } // } let mut ans_arr = vec![0; n+9]; ans_arr[0] = s; for i in 1..n { let mut ret = 0; for kk in 1..=k+1 { if i >= kk { // ret += ans_arr[i-k] / fibo[i-k]; let div = mod_div(ans_arr[i-kk], fibo[kk-1]); ret = mod_add(ret, div); } } ans_arr[i] = ret; } // { // for i in 0..=n { // println!("{}", ans_arr[i]); // } // } println!("{}", ans_arr[n-1]); } const MOD : usize = 10007; #[allow(unused)] fn mod_add(a: usize, b: usize) -> usize { let a = a % MOD; let b = b % MOD; (a + b) % MOD } #[allow(unused)] fn mod_sub(a: usize, b: usize) -> usize { let a = a % MOD; let b = b % MOD; (a + MOD - b) % MOD } #[allow(unused)] fn mod_mul(a: usize, b: usize) -> usize { let a = a % MOD; let b = b % MOD; (a * b) % MOD } #[allow(unused)] fn mod_div(a: usize, b: usize) -> usize { mod_mul(a, mod_pow(b, MOD-2)) } #[allow(unused)] fn mod_pow(mut a: usize, mut b: usize) -> usize { let mut ret = 1; while b > 0 { if b % 2 == 1 { ret = mod_mul(ret, a); } a = mod_mul(a, a); b /= 2; } ret }