#include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, s, n) for (int i = (int)(s); i < (int)(n); i++) #define all(x) x.begin(), x.end() using namespace std; using ll = long long; using ull = unsigned long long; using vi = vector; using vll = vector; using vd = vector; using vvi = vector; using vvll = vector; using vvd = vector; using vs = vector; using vb = vector; using vvb = vector; using vc = vector; using vvc = vector; using pii = pair; using pll = pair; using pil = pair; using pli = pair; using vpii = vector; using vpll = vector; using vpil = vector; using vpli = vector; const double PI = acos(-1); const ll MOD = 1000000007; const ll MODL = 2147483647; const int INF = 1000000007; const ll INFL = 1LL<<60; template inline bool chmin(T &a, T b) {if (a > b) {a = b; return true;} return false;} template inline bool chmax(T &a, T b) {if (a < b) {a = b; return true;} return false;} // template T gcd(T a, T b) {if (a < b) swap(a, b); if (b == 0) return a; else return gcd(b, a%b);} template inline T ceil(T a, T b) {return (a+(b-1))/b;} template inline T floor(T a, T b) {return a/b;} inline void add(ll &a, ll b) {a = ((a % MOD + b % MOD)) % MOD;} inline void sub(ll &a, ll b) {a = ((a % MOD - b % MOD) + MOD) % MOD;} inline void mul(ll &a, ll b) {a = ((a % MOD) * (b % MOD)) % MOD;} int main() { int n, s, K; cin >> n >> s >> K; rep(i, n) s -= i*K; if (s < 0) cout << 0 << endl; else { vvll dp(s+1, vll(n+1, 0)); dp[0][0] = 1; rep(i, s+1) { rep2(j, 1, n+1) { if (i - j >= 0) dp[i][j] = (dp[i-j][j] + dp[i][j-1]) % MOD; else dp[i][j] = dp[i][j-1]; } } cout << dp[s][n] << endl; } }