#include "bits/stdc++.h" #define rep(i,n) for(int i=0;i> N >> d >> K; //dp[i][j] : i回の移動でj段目にたどり着く方法 //ds[i][j] : i回の移動でj段目以下にたどり着く方法 vector> dp(N + 1, vector(K + 1, 0)), ds(N + 1, vector(K + 1, 0)); dp[0][0] = 1; rep(j, K + 1) ds[0][j] = 1; rep(i, N) { rep(j, K) { if (j >= d) { dp[i + 1][j + 1] = ds[i][j] - ds[i][j - d] + MOD; dp[i + 1][j + 1] %= MOD; } else { dp[i + 1][j + 1] = ds[i][j]; } } rep(j, K) { ds[i + 1][j + 1] = ds[i + 1][j] + dp[i + 1][j + 1]; ds[i + 1][j + 1] %= MOD; } } /* rep(i, N + 1) { rep(j, K + 1) { cout << dp[i][j] << " "; } cout << "\n"; } rep(i, N + 1) { rep(j, K + 1) { cout << ds[i][j] << " "; } cout << "\n"; } */ cout << dp[N][K] << "\n"; }