#include <bits/stdc++.h>
using namespace std;
const long long infll = powl(2, 62) - 1;
const long double pi = 4.0 * atanl(1.0);
const long long mod = powl(10, 9) + 7;
unordered_map<string, long long> table;
long long ways(long long tgtSum, long long &k, long long &d,
               bool valid = false) {
  string index = to_string(tgtSum) + '$' + to_string(valid);
  if (table.count(index)) return table[index];
  if (tgtSum == 0) return valid;
  long long ans = 0;
  for (long long i = 1; i <= k; ++i) {
    if (i <= tgtSum) {
      if (i >= d)
        ans += ways(tgtSum - i, k, d, true);
      else
        ans += ways(tgtSum - i, k, d, valid);
    }
    ans %= mod;
  }
  table[index] = ans;
  return ans;
}
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, k, d;
  cin >> n >> k >> d;
  cout << ways(n, k, d) << '\n';
  return 0;
}
