水DP,还错了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define MOD ((int)(1e9) + 7)
using namespace std;
typedef long long ll;
ll dp[110];
int n, k, d;
ll add(ll a, ll b) {
return (a+b)%MOD;
}
void DP(ll k) {
dp[0] = 1;
for (int i = 1; i <= n; ++ i) {
dp[i] = 0;
if (i <= k) dp[i] = add(dp[i], 1);
for (int j = 1; j < i; ++ j) if (j <= k) {
dp[i] = add(dp[i], dp[i-j]);
//cout << i << " " << dp[i] << endl;
}
}
}
int main() {
while (cin >> n >> k >> d) {
DP(k); ll res = dp[n];
//cout << dp[n] << endl;
DP(d-1); res -= dp[n];
//cout << dp[n] << endl;
while (res < 0) res += MOD;
res %= MOD;
cout << res << endl;
}
}