#include #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 repb(i, e) for (int i = (int)(e); i >= 0; 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, ll m) {a = ((a % m + b % m)) % m;} inline void sub(ll &a, ll b, ll m) {a = ((a % m - b % m) + m) % m;} inline void mul(ll &a, ll b, ll m) {a = ((a % m) * (b % m)) % m;} int main() { int n, s, K; cin >> n >> s >> K; s -= (n*(n-1)*K) / 2; if (s < 0) cout << 0 << endl; else { vvll dp(s+1, vll(n+1, 0)); dp[0][0] = 1; rep(i, s+1) { rep(j, n+1) { if (i == 0 && j == 0) continue; if (j - 1 >= 0) add(dp[i][j], dp[i][j-1], MOD); if (i - j >= 0) add(dp[i][j], dp[i-j][j], MOD); } } cout << dp[s][n] << endl; } }