#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 1000005
const int mod=1e9+7;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
#define mp make_pair
#define ff first
#define ss second
 
int n,d,h;
int f[maxn];
 
inline int read(){
    int x=0,f=1; char ch=getchar();
    for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
    for (;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
 
int power(int a,int k){
	int ret=1;
	for (;k;k>>=1,a=1ll*a*a%mod) if (k&1) ret=1ll*ret*a%mod;
	return ret;
}
 
int main(){
	n=read(),h=read(),d=read(); int fac=1,val=0;
	for (int i=1;i<=n;i++) fac=1ll*fac*i%mod,val=(val+fac)%mod;
	f[0]=1; int sum=f[0];
	for (int i=1,j=0;i<=h;i++){
		f[i]=1ll*sum*val%mod;
		sum=(sum+f[i])%mod; if (i-j==d) sum=(sum-f[j])%mod,++j;
	}
	int ans=1ll*f[h]*fac%mod*power(val,mod-2)%mod;
	ans=(ans+mod)%mod;
	cout<<ans<<endl;
    return 0;
}