Quite recently a creative student Lesha had a lecture on trees. After the lecture Lesha was inspired and came up with the tree of his own which he called a *k*-tree.

A *k*-tree is an infinite rooted tree where:
 -  each vertex has exactly *k* children; -  each edge has some weight; -  if we look at the edges that goes from some vertex to its children (exactly *k* edges), then their weights will equal 1, 2, 3, ..., *k*. 
The picture below shows a part of a 3-tree.

 

 <img class="tex-graphics" src="https://espresso.codeforces.com/61ac5ac17c4d2f220968eff8fb59bb3c8dc77edf.png" style="max-width: 100.0%;max-height: 100.0%;"/>

 

Help Dima find an answer to his question. As the number of ways can be rather large, print it modulo 1000000007 (10<sup class="upper-index">9</sup> + 7).
A single line contains three space-separated integers: *n*, *k* and *d* (1 ≤ *n*, *k* ≤ 100; 1 ≤ *d* ≤ *k*).
import sys
input = sys.stdin.readline

############ ---- Input Functions ---- ############
def inp():
    return(int(input()))
def inlt():
    return(list(map(int,input().split())))
def insr():
    s = input()
    return(list(s[:len(s) - 1]))
def invr():
    return(map(int,input().split()))
############ ---- Input Functions ---- ############

def k_Tree():
    def num_paths(remaining_sum, traversed,d,k):
        
        if remaining_sum < 0:
            return 0 
        elif remaining_sum < d and not traversed:
            return 0  
        elif remaining_sum == 0 and traversed:
            return 1 
        elif dp_matrix[remaining_sum][traversed] != -1:
            return dp_matrix[remaining_sum][traversed]
        else:
            total_paths = 0
            for i in range(1,k+1):

                traversed_condition = traversed or (i>=d)
                paths_added = num_paths(remaining_sum-i, traversed_condition,d,k)

                if (remaining_sum - i) >= 0 and (remaining_sum-i) <= n:
                    dp_matrix[remaining_sum-i][traversed_condition] = paths_added

                total_paths += paths_added
            #print(total_paths)
            return total_paths

    n,k,d = invr()
    dp_matrix = []
    for i in range(n+1):
        row = [-1,-1]
        dp_matrix.append(row)

    total_paths = num_paths(n,False,d,k)
    print(total_paths)
    return


k_Tree()