동전 교환과 쿼리

각 질의마다 액면 c_i짜리 동전을 d_i개 이하로 사용해 합이 정확히 v가 되는 조합의 수를 센다. 답은 64비트 정수 범위다.

어려움8동적 계획법조합론수학구현아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

어느 나라에서 쓰는 동전은 c1c_1원, c2c_2원, c3c_3원, c4c_4원 네 종류다. 지갑에는 c1c_1원 동전 d1d_1개, c2c_2원 동전 d2d_2개, c3c_3원 동전 d3d_3개, c4c_4원 동전 d4d_4개가 들어 있다. 이 동전으로 정확히 vv원을 만드는 방법이 몇 가지인지 세는 프로그램을 작성하시오.

같은 종류의 동전은 서로 구별하지 않는다. 종류별로 사용한 개수가 모두 같으면 같은 방법이다.

예를 들어 1원 동전 3개, 2원 동전 2개, 5원 동전 3개, 10원 동전 1개를 가지고 10원을 만드는 방법은 네 가지다.

  • 10=1+1+1+2+510 = 1 + 1 + 1 + 2 + 5
  • 10=1+2+2+510 = 1 + 2 + 2 + 5
  • 10=5+510 = 5 + 5
  • 10=1010 = 10

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1T1001 \le T \le 100)

각 테스트 케이스의 첫째 줄에는 정수 c1c_1, c2c_2, c3c_3, c4c_4, qq가 공백으로 구분되어 주어진다. (1c1<c2<c3<c410001 \le c_1 < c_2 < c_3 < c_4 \le 1000, 1q1001 \le q \le 100)

이어지는 qq개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. 각 쿼리는 정수 d1d_1, d2d_2, d3d_3, d4d_4, vv로 이루어진다. (1d1,d2,d3,d4,v1051 \le d_1, d_2, d_3, d_4, v \le 10^5)

출력

각 쿼리마다 c1c_1원 동전을 d1d_1개 이하, c2c_2원 동전을 d2d_2개 이하, c3c_3원 동전을 d3d_3개 이하, c4c_4원 동전을 d4d_4개 이하로 써서 정확히 vv원을 만드는 방법의 수를 한 줄에 하나씩 출력한다. 만드는 방법이 없으면 0을 출력한다. 답은 32비트 정수 범위를 넘을 수 있다.