#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define all(x) x.begin(), x.end()
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template <typename T> using o_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T, typename R> using o_map = tree<T, R, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long ll;
#define inf 1e9
#define MOD 1000000007
#define vint vector<int>
#define vll vector<ll>
#define no cout << "NO" << endl;
#define yes cout << "YES" << endl;
ll binpow(ll n1 , ll x ) {
ll ans1 = 1 ;
while (x -- ) {
ans1*= n1 ;
ans1%=MOD ;
}
return ans1 ;
}
ll ans = 0 ;
ll n , k , d ;
void f (int index , int sum ,bool test ) {
if (index > k ) {
if (sum >=n && test ) ans ++ ;
else return ;
}
if (test && sum >= n ) {
ll reste = k - index ;
ll plus = 1 ;
if (reste > 0 ) plus += binpow (k, reste ) ;
//ans+=(plus % MOD);
ans%=MOD;
cout <<"p " << plus << " ans " << ans << endl ;
return;
}
for (int i = 1 ; i<= k ; i++) {
if (i>=d ) f(index +1 , sum + i , true );
else f(index +1 , sum + i , test ) ;
}
}
void solve(){
cin >> n>> k >> d ;
ans = 0 ;
f(1, 0 , false );
cout << ans << endl ;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcgb19zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBSPiB1c2luZyBvX21hcCA9IHRyZWU8VCwgUiwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKI2RlZmluZSBpbmYgMWU5CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSB2aW50IHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmxsIHZlY3RvcjxsbD4KI2RlZmluZSBubyBjb3V0IDw8ICJOTyIgPDwgZW5kbDsKCiNkZWZpbmUgeWVzIGNvdXQgPDwgIllFUyIgPDwgZW5kbDsKbGwgYmlucG93KGxsIG4xICwgbGwgeCApIHsKICAgIGxsIGFuczEgPSAxIDsKICAgIHdoaWxlICh4IC0tICkgewogICAgICAgIGFuczEqPSBuMSA7CiAgICAgICAgYW5zMSU9TU9EIDsKICAgIH0KICAgIHJldHVybiBhbnMxIDsKfQpsbCBhbnMgID0gMCA7CmxsIG4gLCBrICwgZCA7CnZvaWQgIGYgKGludCBpbmRleCAsIGludCBzdW0gLGJvb2wgdGVzdCAgKSB7CiAgICBpZiAoaW5kZXggPiAgayApIHsKICAgICAgICBpZiAoc3VtID49biAmJiB0ZXN0ICkgYW5zICsrIDsKICAgICAgICBlbHNlIHJldHVybiA7CiAgICB9CiAgICBpZiAodGVzdCAgJiYgc3VtICA+PSBuICkgewogICAgICAgbGwgcmVzdGUgPSAgayAgLSBpbmRleCA7CiAgICAgICAgbGwgcGx1cyA9ICAxIDsKICAgICAgICBpZiAocmVzdGUgID4gMCApIHBsdXMgKz0gYmlucG93IChrLCByZXN0ZSApIDsKICAgICAgICAvL2Fucys9KHBsdXMgJSBNT0QpOwogICAgICAgIGFucyU9TU9EOwogICAgICAgIGNvdXQgPDwicCAiIDw8IHBsdXMgPDwgIiBhbnMgIiA8PCBhbnMgPDwgZW5kbCA7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChpbnQgaSA9IDEgOyBpPD0gayA7IGkrKykgewogICAgICAgIGlmIChpPj1kICkgZihpbmRleCArMSAgLCBzdW0gKyBpICAsIHRydWUgKTsKICAgICAgICBlbHNlIGYoaW5kZXggKzEgLCBzdW0gKyBpICAsIHRlc3QgKSA7CiAgICB9CgoKfQp2b2lkIHNvbHZlKCl7CiAgICBjaW4gPj4gbj4+IGsgPj4gZCA7CiAgICBhbnMgPSAwIDsKICAgIGYoMSwgMCAsIGZhbHNlICk7CiAgICBjb3V0IDw8IGFucyA8PCBlbmRsICA7Cn0KCgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgojaWZuZGVmIE9OTElORV9KVURHRQogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwojZW5kaWYKCiAgICBpbnQgdCA9IDE7CgogICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=