#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int A[51][51];
int B[51][51];
int C[51][51];
int R[53][53];
int a[53][53];
int H,W,h,w;

void view(){
  for(int i=0;i<=H;i++){
    for(int j=0;j<=W;j++){
      printf("%2d ",R[j][i]);
    }
    puts("");
  }
}
void init(){
  for(int i=0;i<H;i++){
    for(int j=0;j<W;j++){
      a[j+1][i+1] = A[j][i];
    }
  }
  for(int i=1;i<=H;i++){
    for(int j=1;j<=W;j++){
      R[j][i] = R[j-1][i]+a[j][i];
    }
  }
  for(int i=1;i<=H;i++){
    for(int j=1;j<=W;j++){
      R[j][i] += R[j][i-1];
    }
  }
}
int get(int x,int y,int x2,int y2){
  //  printf("%d - %d - %d + %d\n",R[x2][y2+1] , R[x2][y+1] , R[x][y2+1] , R[x][y+1]);
  return R[x2][y2] - R[x2][y] - R[x][y2] + R[x][y];
}
int main(){
  cin >> H >> W;
  for(int i=0;i<H;i++)
    for(int j=0;j<W;j++)
      cin >> A[j][i];
  for(int i=0;i<H;i++)
    for(int j=0;j<W;j++)
      cin >> B[j][i];
  cin >> h >> w;
  for(int i=0;i<h;i++)
    for(int j=0;j<w;j++)
      cin >> C[j][i];

  init();
  // view();
  int res;
  bool flag = false;

  for(int y=0;y<H-h+1;y++){
    for(int x=0;x<W-w+1;x++){
      bool f = true;
      for(int y2=0;y2<h;y2++){
	if(!f)break;
	for(int x2=0;x2<w;x2++){
	  if( B[x+x2][y+y2] != C[x2][y2] ){
	    f=false; break;
	  }
	}
      }
      if( f ){
	if( !flag ){
	  //	  printf("%d %d %d %d\n",x,y,x+w,y+h);
	  res = get(x,y,x+w,y+h);
	  flag = true;
	} else {
	  res = max(res,get(x,y,x+w,y+h));
	}
      }
    }
  }
  if ( flag )
    cout << res << endl;
  else puts("NA");
}
