#include #define rep(i, n) for (int i = 0; i < (n); ++i) #define sz(x) int(x.size()) using namespace std; #define MAX_N 100 #define MAX_J 20000 // int N = 3; // int S = 10; // int K = 1; int N, S, K; int dp[MAX_N + 1][MAX_J + 1]; int main() { cin >> N >> S >> K; // P( S - (K + 2K + ... (N-1)K), N ) 問題 // n = S - (K + 2K + ... (N-1)K) // m = N int max_j = S - (N - 1) * (K + (N - 1) * K) / 2; // cout << max_j << endl; // cout << (N - 1) * (K + (N - 1) * K) / 2 << endl; dp[0][0] = 1; for (int i = 1; i <= N; i++) { for (int j = 0; j <= max_j; j++) { if (j - i >= 0) { dp[i][j] = (dp[i - 1][j] + dp[i][j - i]) % 1000000007; } else { dp[i][j] = dp[i - 1][j]; } } } printf("%d\n", dp[N][max_j]); }