#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
const int INF = 1 << 30;
int n, m, mas[101][101], hoge[4][51][51];

bool isfind( const int& k, const int& y, const int& x)
{
  for(int i = 0 ; i < m ; i++ ){
    for(int j = 0 ; j < m ; j++ ){
      if( mas[i + y][j + x] != hoge[k][i][j] && ~hoge[k][i][j]) return false;
    }
  }
  return true;
}

pair< int , int > solve()
{
  for(int i = 0 ; i <= n - m ; i++ ){

    int minx = INF;

    for(int j = 0 ; j <= n - m ; j++ ){
      for(int k = 0 ; k < 4 ; k++ ){
        if(isfind( k, i, j)){
          int pos = 0;
          while(!~hoge[k][i][pos]) pos++;
          minx = min( minx, j + pos + 1);
        }
      }
    }
    if(minx != INF) return make_pair( i + 1 , minx);
  }
  return make_pair( 0, 0);
}
int main()
{
  while(cin >> n >> m, n){
    for(int i = 0 ; i < n ; i++ ){
      for(int j = 0 ; j < n ; j++ ){
        cin >> mas[i][j];
      }
    }
    for(int i = 0 ; i < m ; i++ ){
      for(int j = 0 ; j < m ; j++ ){
        cin >> hoge[0][i][j];
      }
    }

    for(int k = 1 ; k < 4 ; k++ ){
      for(int i = 0 ; i < m ; i++ ){
        for(int j = 0 ; j < m ; j++ ){
          hoge[k][j][m - i - 1] = hoge[k - 1][i][j];
        }
      }
    }

    pair< int , int > pos = solve();
    if(!pos.first) cout << "NA" << endl;
    else cout << pos.second << " " << pos.first << endl;
  }
  return 0;
}