# dp[i階][j回の移動]回数は当然TLEした # 実験するとdの個数分だけの前行の和となる # 累積sdpとするか N, d, K = map(int, input().split()) dp = [0]*(K+1) sdp = [1]*(K+2) dp[0] = 1 sdp[0] = 0 mod = 10**9+7 #print(dp) #print(sdp) for i in range(1, N+1): new_dp =[0]*(K+1) for j in range(K+1): new_dp[j] = sdp[j]-sdp[max(0, j-d)] new_dp[j] %= mod dp = new_dp sdp = [0] temp = 0 for j in range(K+1): temp += dp[j] temp %= mod sdp.append(temp) #print(dp) #print(sdp) ans = dp[K]%mod print(ans)