import sys from itertools import accumulate from typing import List, Tuple def int1(x: str, /): return int(x) - 1 def input(): return sys.stdin.readline().rstrip('\n') def dbg(*args, **kwargs): print(*(repr(arg) for arg in args), *(f'{k}: {repr(v)}' for k, v in kwargs.items()), sep='; ', file=sys.stderr) def main(): M = 10 ** 9 + 7 n, d, x = map(int, input().split()) dp = [1] for i in range(n): *s, = accumulate([0] + dp) dp = [(s[min(len(s) - 1, j + 1)] - s[max(0, j + 1 - d)]) % M for j in range(len(dp) + (d - 1))] return dp[x - n] def _start(): ret = main() if ret is not None: if isinstance(ret, List) or isinstance(ret, Tuple): print(*ret) else: print(ret) if __name__ == '__main__': _start()