#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-ffloat-store")
#pragma GCC optimize("-fno-defer-pop")
long long int ans[501][501];
long long int v = 1;
long long int maxval(long long int n, long long int k, long long int f,
                     long long int d) {
  if (n < 0) return 0;
  if (n == 0 && f == 1)
    return 1;
  else if (n == 0 && f == 0)
    return 0;
  if (ans[n][f] != -1) {
    return ans[n][f];
  }
  long long int j, l = 0, g = 0;
  for (j = 1; j <= k; j++) {
    if (j >= d) g = 1;
    l = (l % 1000000007 + maxval(n - j, k, (g | f), d) % 1000000007) %
        1000000007;
  }
  ans[n][f] = l % 1000000007;
  return ans[n][f];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int i, j, k, l, n, d;
  cin >> n >> k >> d;
  for (i = 0; i < 501; i++) {
    for (j = 0; j < 501; j++) {
      ans[i][j] = -1;
    }
  }
  l = maxval(n, k, 0, d);
  cout << l;
  return 0;
}
