import java.util.*;
public class MinMatrixWidth {
public static int findMinWidth(int[][] matrix, int[] array) {
int N = matrix.length;
int M = matrix[0].length;
int K = array.length;
int minWidth = Integer.MAX_VALUE;
// 将数组转换为频率映射
Map<Integer, Integer> targetMap = new HashMap<>();
for (int num : array) {
targetMap.put(num, targetMap.getOrDefault(num, 0) + 1);
}
for (int i = 0; i < N; i++) {
Map<Integer, Integer> currentMap = new HashMap<>();
int left = 0;
int count = 0;
for (int right = 0; right < M; right++) {
int num = matrix[i][right];
if (targetMap.containsKey(num)) {
currentMap.put(num, currentMap.getOrDefault(num, 0) + 1);
if (currentMap.get(num) <= targetMap.get(num)) {
count++;
}
}
while (count == K) {
minWidth = Math.min(minWidth, right - left + 1);
int leftNum = matrix[i][left];
if (targetMap.containsKey(leftNum)) {
currentMap.put(leftNum, currentMap.get(leftNum) - 1);
if (currentMap.get(leftNum) < targetMap.get(leftNum)) {
count--;
}
}
left++;
}
}
}
return minWidth == Integer.MAX_VALUE ? -1 : minWidth;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
int[][] matrix = new int[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
matrix[i][j] = scanner.nextInt();
}
}
int K = scanner.nextInt();
int[] array = new int[K];
for (int i = 0; i < K; i++) {
array[i] = scanner.nextInt();
}
int result = findMinWidth(matrix, array);
System.out.println(result);
}
}