import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스
ArrayList<Integer> arr = new ArrayList<>(); // 정답을 저장할 list
int ans = 0;
// 테스트케이스
for(int tc=0; tc<T; tc++) {
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken()); // N개의 숫자로 구성된 문자열
int M = Integer.parseInt(st.nextToken()); // M개의 숫자로 구성된 문자열
int Narr[] = new int[N];
int Marr[] = new int[M];
int sum = 0;
ans = 0;
// N개의 숫자로 구성된 문자열을 받아서 배열에 저장
st = new StringTokenizer(br.readLine()," ");
for(int i=0; i<N; i++) {
Narr[i] = Integer.parseInt(st.nextToken());
}
// M개의 숫자로 구성된 문자열을 받아서 배열에 저장
st = new StringTokenizer(br.readLine()," ");
for(int j=0; j<M; j++) {
Marr[j] = Integer.parseInt(st.nextToken());
}
// M 배열이 N 배열보다 클 때
if(Narr.length < Marr.length) {
for(int i=0; i<=(Marr.length-Narr.length); i++) {
sum = 0;
for(int j=0; j<Narr.length; j++) {
sum += (Narr[j] * Marr[i+j]);
}
if(ans<sum) ans = sum;
}
// N 배열이 M 배열보다 클 때
} else {
for(int i=0; i<=(Narr.length-Marr.length); i++) {
sum = 0;
for(int j=0; j<Marr.length; j++) {
sum += (Marr[j] * Narr[i+j]);
}
if(ans<sum) ans = sum;
}
}
arr.add(ans);
}
for(int i=1; i<=T; i++) {
System.out.println("#" + i + " " + arr.get(i-1));
}
}
}