#include <bits/stdc++.h>
using namespace std;
long long Set(long long N, long long pos) { return N = N | (1LL << pos); }
long long reset(long long N, long long pos) { return N = N & ~(1LL << pos); }
bool check(long long N, long long pos) { return (bool)(N & (1LL << pos)); }
long long n, k, d, dp[105][105];
long long solve(long long rem, long long mx) {
  if (rem == 0) {
    if (mx >= d)
      return 1;
    else
      return 0;
  }
  if (rem < 0) return 0;
  if (dp[rem][mx] != -1) return dp[rem][mx];
  long long ret = 0;
  for (long long i = 1; i <= k; i++) {
    ret = (ret + solve(rem - i, max(mx, i))) % 1000000007;
  }
  return dp[rem][mx] = ret;
}
int main() {
  memset(dp, -1, sizeof dp);
  cin >> n >> k >> d;
  cout << solve(n, 0);
}
