#include <bits/stdc++.h>
using namespace std;
const long long int md = 1e9 + 7;
long long int dp[110][2] = {-1};
long long int func(vector<long long int> &a, long long int d, long long int n,
                   long long int pos, int flag) {
  if (dp[n][flag] != -1) return dp[n][flag];
  int flag2 = 0;
  if (n == 0 && flag == 1) return 1;
  long long int sz = a.size();
  long long int ans = 0;
  for (long long int i = 0; i < sz; i++) {
    if (n - a[i] >= 0) {
      if (a[i] >= d) flag2 = 1;
      int f_flag = flag2 || flag;
      ans = (ans % md + func(a, d, n - a[i], i, f_flag) % md) % md;
    }
  }
  dp[n][flag] = ans;
  return ans;
}
int main() {
  long long int n, k, d;
  cin >> n >> k >> d;
  vector<long long int> a(k);
  memset(dp, -1, sizeof(dp));
  for (int i = 0; i < k; i++) {
    a[i] = i + 1;
  }
  long long int ans = func(a, d, n, 0, 0);
  cout << ans << endl;
}
