쿠키 먹는 방법 세기

각 날의 양이 0 이상 X 미만인 D일의 수열 중 합이 N이 되는 경우의 수를 1e9+7로 나눈 나머지를 구한다.

보통7조합론동적 계획법수학아직 제출이 없습니다시간 제한8초메모리 제한512 MB

문제

할머니가 쿠키 NN개를 남기고 가셨다. 누나와 나는 곧바로 먹으려 했지만, 쿠키 옆에 안내문이 붙어 있었다.

  • 쿠키는 상하니 DD일 안에 모두 먹어야 한다.
  • 과식하면 안 되니 하루에 먹는 개수는 XX개보다 적어야 한다.

누나가 말했다. "쿠키를 모두 먹는 방법이 몇 가지나 될까? 한번 세어 보자!"

하나의 방법은 첫째 날부터 DD째 날까지 날마다 먹은 쿠키 개수를 순서대로 적은 것이다. 하루에 먹는 개수는 00 이상이고 XX보다 작아야 하며, DD일 동안 먹은 개수의 합은 정확히 NN이어야 한다. 한 개도 먹지 않는 날이 있어도 된다. 먹은 개수가 다른 날이 하나라도 있으면 두 방법은 서로 다른 방법으로 센다.

예를 들어 NN, DD, XX가 각각 55, 22, 55이면 방법은 4가지다.

  • 첫째 날에 1개, 둘째 날에 4개를 먹는다.
  • 첫째 날에 2개, 둘째 날에 3개를 먹는다.
  • 첫째 날에 3개, 둘째 날에 2개를 먹는다.
  • 첫째 날에 4개, 둘째 날에 1개를 먹는다.

방법의 수가 아주 커서 누나가 손으로 세다가는 끝을 보지 못할 것 같다. 그래서 프로그램으로 세기로 했다.

입력

입력은 여러 개의 데이터 세트로 이루어진다. 데이터 세트는 100개를 넘지 않는다. 각 데이터 세트는 한 줄에 세 정수 NN (1N20001 \le N \le 2000), DD (1D10121 \le D \le 10^{12}), XX (1X20001 \le X \le 2000)가 공백을 두고 주어진다. 입력의 끝은 세 정수가 모두 00인 줄로 나타내며, 이 줄은 처리하지 않는다.

출력

각 데이터 세트마다 방법의 수를 10000000071000000007로 나눈 나머지를 한 줄에 출력한다.