#include <bits/stdc++.h>   using namespace std;   const int MAXN = 105;   const long long MOD = 1e9 + 7;   long long dp[MAXN][MAXN], tmp[MAXN][MAXN];   void fillTmp() {     for (int i = 0; i < MAXN; i++) fill(tmp[i], tmp[i] + MAXN, 0);     return;   }   void fillDp() {     for (int i = 0; i < MAXN; i++)       for (int t = 0; t < MAXN; t++) dp[i][t] = tmp[i][t];     return;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     int n, k, d;     cin >> n >> k >> d;     dp[0][0] = 1;     long long res = 0;     for (int i = 0; i < MAXN; i++) {       fillTmp();       for (int w = 1; w <= k; w++)         for (int t = 0; t < MAXN; t++)           for (int j = 0; j < MAXN; j++)             if (dp[t][j] != 0 && t + w < MAXN)               tmp[t + w][max(w, j)] = (dp[t][j] + tmp[t + w][max(w, j)]) % MOD;       fillDp();       for (int i = d; i < MAXN; i++) res = (res + dp[n][i]) % MOD;     }     cout << res <<   n ;   }   