#include <stdio.h>
#define N 35
int n, m, i, j, k, x, y, ok;
char a[N][N], b[N][N], c[N][N];
int zhuan(){
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
c[i][j] = a[i+x>n?i+x-n:i+x][j];
}
}//之间旋转x次,所有行等于+x行的位置
for(i=1; i<=n; i++){
for(j=1; j<=m; j++){
if(c[i][j+y>m?j+y-m:j+y] != b[i][j]) return 0;
}//列也一样,顺便判断是否相等
}
return 1;
}
int main(){
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++){
scanf("%s", a[i]+1);
}
for(i=1; i<=n; i++){
scanf("%s", b[i]+1);
}
for(x=0; x<n; x++){//周期性:没旋转n次是一个周期
for(y=0; y<m; y++){
if(zhuan()) ok = 1;
}//枚举旋转x次行,y次列
}
printf("%s\n", ok?"Yes":"No");
return 0;
}