#include using namespace std; #include using namespace atcoder; //using mint = modint998244353; using mint = modint1000000007; typedef long long ll; typedef unsigned long long ull; #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() const int MAX = 1e9; const int MIN = -1*1e9; const ll MAXLL = 1e18; const ll MINLL = -1*1e18; //const ll MOD = 998244353; //const ll MOD = 1000000007; vector> Partition(int N) { vector> DP(N+1,vector(N+1)); for(int i = 0; i <= N; i++) DP[0][i] = 1; for(int i = 1; i <= N; i++) { for(int j = 1; j <= N; j++) { if(i < j) DP[i][j] = DP[i][j-1]; else DP[i][j] = DP[i][j-1] + DP[i-j][j]; } } return DP; } int main() { ll N,S,K; cin >> N >> S >> K; ll Cost = (1+(N-1))*(N-1)/2*K; vector> DP = Partition(5010); if(S < Cost) { cout << 0 << endl; return 0; } cout << DP[S-Cost][N].val() << endl; return 0; }