#include #define rep(i,n) for(ll i=0;i<(n);i++) typedef long long ll; using namespace std; typedef pair P; ll const mod = 1000000007; int main(){ /* a1+K≤a2,a1+2K≤a3,⋯,a1+NK≤an ここでbi = ai - ikとすると, b1<= b2 <= b3...となる。 s= a1 + a2 .. anの条件式に代入すると b1 + b2 .. bn = s - (k + 2k + ...nk)= s - n(n-1)k/2 となる。あとは分割法 */ int n, s, k; cin >> n >> s >> k; s -= n*(n-1)*k/2; if(s<0){ cout << 0 << endl; return 0; } //dp[i][j] jのi分割 ll dp[n+1][s+1] = {}; dp[0][0] = 1; for(int i=1;i<=n;i++)rep(j,s+1){ if(j-i>=0){ dp[i][j] = ((dp[i][j-i] + dp[i-1][j]) % mod); } else{//iの方が大きいと分割できない dp[i][j] = dp[i-1][j] % mod; } } cout << dp[n][s] << endl; }