제한된 메모리

아직 제출이 없습니다시간 제한7초메모리 제한4 MB

문제

정수 NN개로 이루어진 배열 XX가 있습니다. 배열의 원소를 직접 주지 않고, 아래 규칙으로 생성합니다.

쿼리는 정수 qq 하나로 주어지고, 배열 XX에서 qq번째로 작은 원소를 묻습니다. 여기서 qq는 0-based 인덱스입니다. 즉 q=0q=0이면 가장 작은 원소, q=1q=1이면 두 번째로 작은 원소입니다. 같은 값이 여러 번 나타나면 나타난 횟수만큼 따로 셉니다.

정렬한 다음 답을 읽으면 끝나는 문제로 보이지만, 메모리 제한이 배열 XX 전체를 담기에는 너무 작습니다. 대신 쿼리 개수는 적어서 쿼리 정보는 전부 저장할 수 있습니다.

NN, x0x_0, aa, bb와 쿼리 목록이 주어집니다. 배열 XX를 만드는 의사 코드는 다음과 같습니다.

X[0] = x0
for i = 1 to N-1:
    X[i] = (X[i-1] * a + b) % 1000000007

곱셈 중간값이 32비트를 넘으니 오버플로에 주의하세요.

모든 쿼리의 답을 더한 값을 출력하는 프로그램을 작성하세요.

입력

첫째 줄에 정수 NN, x0x_0, aa, bb가 공백으로 구분되어 주어집니다. (1N2×1061 \le N \le 2 \times 10^6, 0x0,a,b109+60 \le x_0, a, b \le 10^9 + 6)

둘째 줄에 쿼리의 개수 QQ가 주어집니다. (1Q10001 \le Q \le 1000)

셋째 줄에 쿼리를 나타내는 정수 QQ개가 공백으로 구분되어 주어집니다. (0qN10 \le q \le N-1)

출력

모든 쿼리의 답을 더한 값을 한 줄에 출력합니다. 이 값은 101310^{13}보다 작으므로 64비트 정수에 들어갑니다.