// And in the end, the love you take is equal to the love you make.
//                      Paul McCartney (the Beatles). The End. Abbey Road.

#include <bits/stdc++.h>
using namespace std;

using LL = long long;

namespace _buff {

const size_t BUFF = 1 << 19;
char ibuf[BUFF], *ib = ibuf, *ie = ibuf;
char getc() {
  if (ib == ie) {
    ib = ibuf;
    ie = ibuf + fread(ibuf, 1, BUFF, stdin);
  }
  return ib == ie ? -1 : *ib++;
}

}

LL read() {
  using namespace _buff;
  LL ret = 0;
  bool pos = true;
  char c = getc();
  for (; (c < '0' || c > '9') && c != '-'; c = getc()) {
    assert(~c);
  }
  if (c == '-') {
    pos = false;
    c = getc();
  }
  for (; c >= '0' && c <= '9'; c = getc()) {
    ret = (ret << 3) + (ret << 1) + (c ^ 48);
  }
  return pos ? ret : -ret;
}

const size_t N = 1e6 + 5;
const int MOD = 1e9 + 7;

int qpow(int base, int e) {
  int ret = 1;
  for (; e; e >>= 1) {
    if (e & 1) {
      ret = (LL) ret * base % MOD;
    }
    base = (LL) base * base % MOD;
  }
  return ret;
}

int f[N], pre[N];

int main() {
  int n = read(), h = read(), d = read();

  int fac = 1, sum = 0;
  for (int i = 1; i <= n; ++i) {
    fac = (LL) fac * i % MOD;
    sum = (sum + fac) % MOD;
  }

  f[0] = pre[0] = 1;
  for (int i = 1; i <= h; ++i) {
    f[i] = (LL) (pre[i - 1] - (i >= d + 1 ? pre[i - d - 1] : 0)) * sum % MOD;
    pre[i] = (pre[i - 1] + f[i]) % MOD;
  }

  if (f[h] < 0) f[h] += MOD;
  cout << (LL) f[h] * fac % MOD * qpow(sum, MOD - 2) % MOD << endl;
  return 0;
}
