#include #include using namespace std; typedef long long ll; const ll MOD = 1000000007; // number of scenes (incl. flat) with n inches left, and k columns left ll memo[10001][101]; int n, w, h; int main() { cin >> n >> w >> h; // base cases for (int nn = 0; nn <= n; nn++) { memo[nn][0] = 1; } for (int ww = 0; ww <= w; ww++) { memo[0][ww] = 1; } for (int nn = 1; nn <= n; nn++) { memo[nn][1] = min(h, nn) + 1; } for (int ww = 2; ww <= w; ww++) { for (int nn = 1; nn <= n; nn++) { memo[nn][ww] = (memo[nn-1][ww] + memo[nn][ww-1]) % MOD; if (nn - (h+1) >= 0) { memo[nn][ww] = (memo[nn][ww] - memo[nn - (h+1)][ww-1]) % MOD; } } } ll temp = min(h, n/w) + 1; ll ans = memo[n][w] - temp; if (ans < 0) ans += MOD; cout << ans << endl; return 0; }