#include <bits/stdc++.h>
using namespace std;
long long mod = 1000000007;
long long dp[101] = {0};
long long dp1[101] = {0};
long long dfs(int n, int k) {
  long long count = 0;
  for (int i = 1; i <= k; i++) {
    if (i < n) {
      if (dp[n - i] == 0) {
        dp[n - i] = dfs(n - i, k);
        count = (count % mod + dp[n - i] % mod) % mod;
      } else {
        count = (count % mod + dp[n - i] % mod) % mod;
      }
    } else if (i > n) {
      break;
    } else {
      count++;
      return count;
    }
  }
  return count;
}
long long dfs1(int n, int k, int d) {
  long long count = 0;
  for (int i = 1; i <= k; ++i) {
    if (i < d) {
      if (i < n) {
        if (dp1[n - i] == 0) {
          dp1[n - i] = dfs1(n - i, k, d);
          count = (count % mod + dp1[n - i] % mod) % mod;
        } else {
          count = (count % mod + dp1[n - i] % mod) % mod;
        }
      } else if (i > n) {
        break;
      } else {
        count++;
        return count;
      }
    }
  }
  return count % mod;
}
void solve() {
  int n, k, d;
  cin >> n >> k >> d;
  cout << (dfs(n, k) - dfs1(n, k, d) + mod) % mod << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  solve();
  return 0;
}
