gMatrix (Small)

주어진 식으로 행렬을 만들고 한 변이 K인 모든 연속 부분행렬의 최댓값을 합합니다.

쉬움2완전 탐색행렬구현면접 대비아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

크기가 N×NN \times N인 정사각 행렬 MM이 있다. MM의 원소는 모두 음이 아닌 정수이다. MM 안에 들어 있는 모든 K×KK \times K 부분 행렬마다 그 안의 최댓값을 하나씩 구한 다음, 구한 값을 전부 더한 결과를 구하려고 한다. 여기서 부분 행렬은 연속한 KK개의 행과 연속한 KK개의 열로 이루어진다. MM의 같은 칸이 여러 부분 행렬에서 동시에 최댓값이 될 수 있는데, 그런 칸은 최댓값이 된 횟수만큼 중복해서 더한다.

행렬을 그대로 입력받는 대신 길이가 NN인 두 배열 AABB, 그리고 두 정수 CCXX가 주어진다. ii번째 행, jj번째 열의 원소는 Mij=(Ai×i+Bj×j+C)modXM_{ij} = (A_i \times i + B_j \times j + C) \bmod X이다. 이때 iijj는 모두 11 이상 NN 이하이다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스의 첫째 줄에는 네 정수 NN, KK, CC, XX가 공백으로 구분되어 주어진다. 둘째 줄에는 배열 AA의 원소 NN개가, 셋째 줄에는 배열 BB의 원소 NN개가 공백으로 구분되어 주어진다.

출력

각 테스트 케이스마다 한 줄에 Case #x: y 형식으로 출력한다. xx11부터 시작하는 테스트 케이스 번호이고, yy는 모든 K×KK \times K 부분 행렬의 최댓값을 더한 값이다.

제한

  • 1T1001 \le T \le 100
  • 1N501 \le N \le 50
  • 1KN1 \le K \le N
  • 1Ai,Bi1000001 \le A_i, B_i \le 100000
  • 1C1000001 \le C \le 100000
  • 1X10000000071 \le X \le 1000000007

힌트

첫 번째 테스트 데이터의 세 번째 테스트 케이스는 N=3N = 3, K=2K = 2, C=3C = 3, X=109X = 109, A=(6,4,3)A = (6, 4, 3), B=(2,1,5)B = (2, 1, 5)이므로 행렬은 다음과 같다.

11 11 24
13 13 26
14 14 27

2×22 \times 2 부분 행렬은 네 개이고 각각의 최댓값은 1313, 2626, 1414, 2727이므로 답은 8080이다.