// Arup Guha
// 4/17/2016
// Solution to 2016 NAIPC Problem F: Mountain Scenes

import java.util.*;

public class f {

	public static long MOD = 1000000007L;
	public static int h;
	public static long[][] memo;

	public static void main(String[] args) {

		// Read input.
		Scanner stdin = new Scanner(System.in);
		int n = stdin.nextInt();
		int w = stdin.nextInt();
		h = stdin.nextInt();

		// Set up memo table and solve.
		memo = new long[n+1][w+1];
		for (int i=0; i<=n; i++)
			Arrays.fill(memo[i], -1);
		long res = solve(n, w);

		// Don't forget to subtract out plain scenes and watch out for the MOD.
		res = (res - Math.min(h+1,n/w+1) + MOD)%MOD;
		System.out.println(res);
	}

	public static long solve(int n, int w) {

		// Base cases.
		if (memo[n][w] != -1) return memo[n][w];
		if (w == 0) return 1L;

		// Try each size strip in this slot.
		long res = 0;
		for (int i=0; i<=Math.min(n,h); i++)
			res = (res + solve(n-i,w-1))%MOD;

		// Store and return.
		memo[n][w] = res;
		return res;
	}
}
