n, d, k = map(int, input().split()) MOD = 10 ** 9 + 7 #dp[i段目][j回目の移動] dp = [[0] * (k + 1) for i in range(n + 1)] dp[0][0] = 1 for i in range(n): ruiseki = [0] * (k + 1) for j in range(k): ruiseki[j + 1] = ruiseki[j] + dp[i][j] for j in range(k): dp[i + 1][j + 1] += ruiseki[j + 1] - ruiseki[max((j + 1) - d, 0)] dp[i + 1][j + 1] %= MOD print(dp[-1][-1])