#include<iostream>
using namespace std;

#define MAX 32
typedef pair<int,int> pi;

inline bool isinside(int H, int W, pi p){
  return 0<=p.first&&p.first<H && 0<=p.second&&p.second<W;
}

int cnt;
int ans[MAX][MAX];

void solve(int H, int W, int n, int area[], pi pos[], int M[][MAX], int now){

  /*
  for(int i = 0; i < H; ++i){
    for(int j = 0; j < W; ++j){
      if( j > 0 ) cout << ' ';
      cout << M[i][j];
    }
    cout << endl;
  }
  cout << " --------------- " << endl;
  */

  if( now > n ){
    ++cnt;
    for(int i = 0; i < H; ++i){
      for(int j = 0; j < W; ++j){
	ans[i][j] = M[i][j];
      }
    }
    return ;
  }
  int A = area[now];
  if( A > 0 ){
    for(int h = 1; h <= A; ++h){
      if( A % h == 0 ){
	int w = A / h;
	for(int i = 0; i < h; ++i){
	  for(int j = 0; j < w; ++j){
	    pi st(pos[now].first-i,pos[now].second-j);
	    pi ed(st.first+h-1,st.second+w-1);
	    if( isinside( H,W,st ) && isinside( H,W,ed ) ){

	      //	      cout << " NOW : " << now << ' ' << st.first << ' ' << st.second << ' ' << h << ' ' << w << endl;
	      
	      int tM[MAX][MAX];
	      for(int ti = 0; ti < H; ++ti){
		for(int tj = 0; tj < W; ++tj){
		  tM[ti][tj] = M[ti][tj];
		}
	      }
	      
	      for(int ti = 0; ti < h; ++ti){
		for(int tj = 0; tj < w; ++tj){
		  if( M[st.first+ti][st.second+tj] != now && M[st.first+ti][st.second+tj] != 0 ) goto next;
		  M[st.first+ti][st.second+tj] = now;
		}
	      }
	      solve( H,W,n,area,pos,M,now+1 );
	      
	    next:;
	      for(int ti = 0; ti < H; ++ti){
		for(int tj = 0; tj < W; ++tj){
		  M[ti][tj] = tM[ti][tj];
		}
	      }
	    }
	  }
	}
      }
    }
  }else{
    solve( H,W,n,area,pos,M,now+1 );
  }
  return ;
}

int main()
{
  while(true){
    int H,W,n;
    int area[MAX]={0,};
    pi pos[MAX];
    int M[MAX][MAX]={{0,},};
    cin >> W >> H >> n;
    if( H == 0 && W == 0 && n == 0 ) break;

    for(int i = 0; i < n; ++i){
      int b,k;
      cin >> b >> k;
      area[b]=k;
    }
    
    for(int i = 0; i < H; ++i){
      for(int j = 0; j < W; ++j){
	cin >> M[i][j];
	if( M[i][j] > 0 ){
	  pos[ M[i][j] ] = pi(i,j);
	}
      }
    }

    cnt = 0;
    solve( H,W,n,area,pos,M,1 );

    if( cnt == 1 ){
      for(int i = 0; i < H; ++i){
	for(int j = 0; j < W; ++j){
	  if( j > 0 ) cout << ' ';
	  cout << ans[i][j];
	}
	cout << endl;
      }
    }else{
      cout << "NA" << endl;
    }
    
  }  
  return 0;
}