정수 N개로 이루어진 배열 X가 있습니다. 배열의 원소를 직접 주지 않고, 아래 규칙으로 생성합니다.
쿼리는 정수 q 하나로 주어지고, 배열 X에서 q번째로 작은 원소를 묻습니다. 여기서 q는 0-based 인덱스입니다. 즉 q=0이면 가장 작은 원소, q=1이면 두 번째로 작은 원소입니다. 같은 값이 여러 번 나타나면 나타난 횟수만큼 따로 셉니다.
정렬한 다음 답을 읽으면 끝나는 문제로 보이지만, 메모리 제한이 배열 X 전체를 담기에는 너무 작습니다. 대신 쿼리 개수는 적어서 쿼리 정보는 전부 저장할 수 있습니다.
N, x0, a, b와 쿼리 목록이 주어집니다. 배열 X를 만드는 의사 코드는 다음과 같습니다.
X[0] = x0
for i = 1 to N-1:
X[i] = (X[i-1] * a + b) % 1000000007
곱셈 중간값이 32비트를 넘으니 오버플로에 주의하세요.
모든 쿼리의 답을 더한 값을 출력하는 프로그램을 작성하세요.
첫째 줄에 정수 N, x0, a, b가 공백으로 구분되어 주어집니다. (1≤N≤2×106, 0≤x0,a,b≤109+6)
둘째 줄에 쿼리의 개수 Q가 주어집니다. (1≤Q≤1000)
셋째 줄에 쿼리를 나타내는 정수 Q개가 공백으로 구분되어 주어집니다. (0≤q≤N−1)
모든 쿼리의 답을 더한 값을 한 줄에 출력합니다. 이 값은 1013보다 작으므로 64비트 정수에 들어갑니다.