#include #include using namespace std; const int mod = 1e9 + 7; struct modint { int n; modint(int n = 0) : n(n) {} }; modint operator+(modint a, modint b) { return modint((a.n += b.n) >= mod ? a.n - mod : a.n); } modint operator-(modint a, modint b) { return modint((a.n -= b.n) < 0 ? a.n + mod : a.n); } modint operator*(modint a, modint b) { return modint(1LL * a.n * b.n % mod); } modint &operator+=(modint &a, modint b) { return a = a + b; } modint &operator-=(modint &a, modint b) { return a = a - b; } modint &operator*=(modint &a, modint b) { return a = a * b; } const int N = 2e6; modint inv[N]; modint fact[N]; modint invfact[N]; void init() { inv[1] = 1; for (int i = 2; i < N; i++) { inv[i] = inv[mod % i] * (mod - mod / i); } fact[0] = 1; invfact[0] = 1; for (int i = 1; i < N; i++) { fact[i] = i * fact[i - 1]; invfact[i] = inv[i] * invfact[i - 1]; } } modint perm(int n, int r) { if (n < 0 || r < 0 || n < r) { return 0; } return fact[n] * invfact[n - r]; } modint binom(int n, int r) { if (n < 0 || r < 0 || n < r) { return 0; } return fact[n] * invfact[r] * invfact[n - r]; } modint H(int n, int r) { if (n == 0 && r == 0) { return 1; } return binom(n + r - 1, r); } int main() { int N, K, D; cin >> N >> K >> D; init(); int C = N; int R = 0; while (C > K - 1) { C -= K - 1; R++; } if (D == 1) { cout << C << endl; return 0; } modint ans = 0; modint p = 1; for (int y = 0; y <= R; y++) { ans += p * C * H(C - 1, R - y); p *= D; } cout << ans.n << endl; }