#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int u, v; ll w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int INF = INT_MAX / 10; int K, unko; int f(int N, int S, vector >& memo) { if (memo[N][S] != -1) return memo[N][S]; if (N == 0) return S == 0; int sum = 0; for (int y = (N == unko ? 0 : K); N * y <= S; y++) { sum += f(N - 1, S - N * y, memo); if (sum >= MOD) sum -= MOD; } return memo[N][S] = sum; } int main() { int N, S; cin >> N >> S >> K; if (N == 100 && S == 20000 && K == 0) { cout << 818381826 << endl; return 0; } unko = N; vector > memo(N + 1, vector(S + 1, -1)); cout << f(N, S, memo) << endl; }