package com.hackerrank.algorithms.implementation;
import java.util.Scanner;
/**
* Created by ramswaroop on 02/05/2016.
*/
public class GridSearch {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for (int a0 = 0; a0 < t; a0++) {
int R = in.nextInt();
int C = in.nextInt();
String G[] = new String[R];
for (int G_i = 0; G_i < R; G_i++) {
G[G_i] = in.next();
}
int r = in.nextInt();
int c = in.nextInt();
String P[] = new String[r];
for (int P_i = 0; P_i < r; P_i++) {
P[P_i] = in.next();
}
// create 2D array for grid
int grid[][] = new int[R][C];
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
grid[i][j] = Character.getNumericValue(G[i].charAt(j));
}
}
// create 2D array for pattern to be searched in grid
int pattern[][] = new int[r][c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
pattern[i][j] = Character.getNumericValue(P[i].charAt(j));
}
}
// search logic
outerLoop:
for (int G_i = 0; G_i < R; G_i++) {
for (int G_j = 0; G_j < C; G_j++) {
innerLoop:
for (int P_i = 0; P_i < r && G_i + P_i < R; P_i++) {
for (int P_j = 0; P_j < c && G_j + P_j < C; P_j++) {
if (grid[G_i + P_i][G_j + P_j] != pattern[P_i][P_j]) {
break innerLoop;
} else if (P_i == r - 1 && P_j == c - 1) {
System.out.println("YES");
break outerLoop;
}
}
}
if (R - G_i < r) { // no. of rows left in grid less than no. of rows in pattern
System.out.println("NO");
break outerLoop;
}
}
}
}
}
}