#include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i, n) for (int64_t i = 0; i < (n); i++) #define irep(i, n) for (int64_t i = 0; i <= (n); i++) #define rrep(i, n) for (int64_t i = (n)-1; i >= 0; i--) #define rirep(i, n) for (int64_t i = n; i >= 0; i--) const uint64_t MOD = 1'000'000'007L; int64_t dp[20'001][101]; int main() { int n, s, k; cin >> n >> s >> k; irep(i, s) irep(j, n) { if (j == 0) { dp[i][j] = i == 0 ? 1 : 0; } else { dp[i][j] = 0; if (i - j >= 0) { dp[i][j] += dp[i - j][j]; dp[i][j] %= MOD; } if (i - k * (j - 1) >= 0) { dp[i][j] += dp[i - k * (j - 1)][j - 1]; dp[i][j] %= MOD; } } } cout << dp[s][n] << endl; return 0; }