#include<bits/stdc++.h>
#define gc getchar()
#define ll long long
#define pb push_back
#define mk make_pair
#define rint register int
#define debug(x) cerr<<#x<<"="<<x<<"\n"
#define pa pair<int,int>
#define fir first
#define sec second
using namespace std;
const int mod = 1e9+7;
inline int read(){int w=1,s=0;char ch=getchar();while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}while(isdigit(ch)){s=s*10+ch-'0';ch=getchar();}return  w*s;}
int n,H,D;
int Sum[1101000],f[1010100];
inline ll ksm(ll x,ll y){ll res=1;while(y){if(y&1) res=res*x%mod;x=x*x%mod;y>>=1;} return res;}
inline int pls(int a,int b){a+=b;return a>=mod?a-mod:a;}
inline int mns(int a,int b){a-=b;return a<0?a+mod:a;}
inline int get(int x,int y){
	if(x==0) return Sum[y];
	else return mns(Sum[y],Sum[x-1]);
}
int main()
{	
	n=read(),H=read(),D=read();
	int S,cur;
	S=cur=1;
	for(rint i=2;i<=n;++i) {
		cur=1ll*cur*i%mod;
		S=pls(S,cur);
	}
	Sum[0]=1;
	for(rint i=1;i<=H;++i) {
		Sum[i]=Sum[i-1];
		f[i]=get(max(i-D,0),i);
		Sum[i]=pls(Sum[i],1ll*f[i]*S%mod);
	}
	for(rint i=1;i<=n;++i) f[H]=1ll*f[H]*i%mod;
	cout<<f[H]<<"\n";
	return 0;
}	