#include constexpr std::int64_t MOD = 1e9 + 7; int main() { std::int64_t N, S, K; std::cin >> N >> S >> K; std::vector>> dp(N + 1, std::vector>(S + 1)); // endo for (auto i : std::views::iota(0, S + 1)) dp[0][i][i] = 1; std::int64_t result = 0; for (auto i : std::views::iota(1, N)) { for (auto j : std::views::iota(K, S + 1)) { if (j > 0) for (auto [index, value] : dp[i][j - 1]) { if (index <= S) dp[i][j][index + 1] = (dp[i][j][index + 1] + value) % MOD; } for (auto [index, value] : dp[i - 1][j - K]) { if (index + j <= S) dp[i][j][index + j] = (dp[i][j][index + j] + value) % MOD; } } // release dp[i - 1].clear(); } for (auto j : std::views::iota(K, S + 1)) { result = (result + dp[N - 1][j][S]) % MOD; } std::cout << result << std::endl; return 0; }