#include <bits/stdc++.h>
using namespace std;
int dp[107][107][2];
const int MOD = 1e9 + 7;
int n, k, d;
int answer(int rem, int it, int has_d) {
  if (rem == 0) return has_d;
  if (dp[rem][it][has_d] != -1) return dp[rem][it][has_d];
  int ans = 0;
  for (int i = 1; i <= k; i++) {
    if (i > rem) break;
    int temp_d = i >= d ? 1 : 0;
    ans = (ans + answer(rem - i, it + 1, max(has_d, temp_d))) % MOD;
  }
  return dp[rem][it][has_d] = ans;
}
int main() {
  cin >> n >> k >> d;
  int ways = 0;
  memset(dp, -1, sizeof(dp));
  for (int i = 1; i <= k; i++) {
    if (n < i) break;
    int temp_d = i >= d ? 1 : 0;
    ways = (ways + answer(n - i, 1, temp_d)) % MOD;
  }
  cout << ways << endl;
  return 0;
}
