#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define fix(n) cout<; const ll MOD = 1000000007; // 10^9 + 7 const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1}; const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1}; void solve() { int n, d, k; cin >> n >> d >> k; const int MAX = 90305; ll dp[MAX][2] = {{}}; dp[0][0] = 1; rep(i, n) { ll sum = 0, cnt = 0; for (int j = 0; j <= k; j++) { dp[j][1] = sum; if (cnt + 1 > d) { cnt--; sum = (sum - dp[j - d][0]) % MOD; if (sum < 0) sum += MOD; } cnt++; sum = (sum + dp[j][0]) % MOD; } // for (int j = 0; j < MAX; j++) // debug2(j, dp[j][1]); // outl("------------"); rep(i, MAX) dp[i][0] = dp[i][1]; } outl(dp[k][1]); } int main() { cin.tie(0); ios::sync_with_stdio(false); srand((unsigned)time(NULL)); fix(12); solve(); }