#include <iostream>
using namespace std;

struct sqe {
	int n,w[5],h[5];
 };
 
 struct block {
	 int n,f[100],x[100],y[100],w[100],h[100];
 };
  
 sqe sq[101];
 block bl[15];
 
 int t,b[15],x,y,n,m[10][10],m2[10][10],m3[10][10],m4[15],an[10][10];
 
 void makebl(int s,int x1,int y1) {
	 int i,j,k,w2,h2;
	 bl[s].n=0;
	 for (i=0;i<100;i++) bl[s].f[i]=0;
	 for (i=0;i<sq[b[s]].n;i++) {
		 for (j=y1-sq[b[s]].h[i]+1;j<=y1;j++) {
			 if (j<0 || j+sq[b[s]].h[i]>y) continue;
			 for (k=x1-sq[b[s]].w[i]+1;k<=x1;k++) {
				 if (k<0 || k+sq[b[s]].w[i]>x) continue;
				 for (h2=j;h2<=j+sq[b[s]].h[i]-1;h2++)
				     for (w2=k;w2<=k+sq[b[s]].w[i]-1;w2++) if (m[h2][w2]!=0 && m[h2][w2]!=s+1) {h2=w2=99;} 
				     if (h2<99) { bl[s].x[bl[s].n]=k; bl[s].y[bl[s].n]=j;
				                  bl[s].w[bl[s].n]=sq[b[s]].w[i]; bl[s].h[bl[s].n]=sq[b[s]].h[i]; bl[s].n++;}
						  }
					  }
				  }
    }
    
void setflg() {
	int i,j,k,x1,y1;
	for (i=0;i<n;i++) {
		m4[i]=0;
		for (j=0;j<bl[i].n;j++) {
             for (y1=bl[i].y[j];y1<=bl[i].y[j]+bl[i].h[j]-1;y1++) { 
                  for(x1=bl[i].x[j];x1<=bl[i].x[j]+bl[i].w[j]-1;x1++) m2[y1][x1]=m2[y1][x1] | (1 << i);
			  }
	      }
	   }
	 for (y1=0;y1<y;y1++) for (x1=0;x1<x;x1++) for (i=0;i<n;i++) if (m2[y1][x1]==(1 << i)) m4[i]++;
	  for (i=0;i<n;i++) {
		 for (j=0;j<bl[i].n;j++) {
			  k=0;
			  for (y1=bl[i].y[j];y1<=bl[i].y[j]+bl[i].h[j]-1;y1++)
				for(x1=bl[i].x[j];x1<=bl[i].x[j]+bl[i].w[j]-1;x1++) if (m2[y1][x1]==(1 << i)) k++;
				if (k!=m4[i]) bl[i].f[j]=1;
			}
		}
	}  	     

int ans(int n1) {
	int i,j,x1,y1;
	if (n1==n) { t++;
		if (t==1) { for (i=0;i<y;i++) for (j=0;j<x;j++) an[i][j]=m3[i][j];} else return 1;
		return 0;}  
	for (i=0;i<bl[n1].n;i++) {
		if (bl[n1].f[i]==1) continue;
		
		 for (y1=bl[n1].y[i];y1<=bl[n1].y[i]+bl[n1].h[i]-1;y1++) 
		 	  for (x1=bl[n1].x[i];x1<=bl[n1].x[i]+bl[n1].w[i]-1;x1++) if (m3[y1][x1]!=0) x1=y1=99;
		 	  
		 	  if (x1<99) {
				 for (y1=bl[n1].y[i];y1<=bl[n1].y[i]+bl[n1].h[i]-1;y1++) 
		 	     for (x1=bl[n1].x[i];x1<=bl[n1].x[i]+bl[n1].w[i]-1;x1++) m3[y1][x1]=n1+1;
		 	     if (ans(n1+1)==1) return 1;
		 	     for (y1=bl[n1].y[i];y1<=bl[n1].y[i]+bl[n1].h[i]-1;y1++) 
		 	     for (x1=bl[n1].x[i];x1<=bl[n1].x[i]+bl[n1].w[i]-1;x1++) m3[y1][x1]=0;
			 }
			 
		 }
		 return 0;
	 }
	 
 int main() {
	 int i,j,g,k;
	 for (i=0;i<101;i++) sq[i].n=0;
	 for (i=1;i<11;i++) for (j=1;j<11;j++) { sq[i*j].w[sq[i*j].n]=j; sq[i*j].h[sq[i*j].n]=i; sq[i*j].n++;}
	 while(cin >> x >> y >> n && n>0) {
		 t=0;
		 for (i=0;i<n;i++) { cin >> g >> k; b[g-1]=k; t+=k; }
		 for (i=0;i<y;i++) for (j=0;j<x;j++) cin >> m[i][j];
		 for (i=0;i<y;i++) for (j=0;j<x;j++) { if (m[i][j]!=0) makebl(m[i][j]-1,j,i); m2[i][j]=m3[i][j]=0; }
		 if (t!=i*j) { cout << "NA" << endl; continue;}
		 t=0;
		 setflg();
		 ans(0);
		 if (t!=1) cout << "NA" << endl;
		 else { 		 
		 for (i=0;i<y;i++) {
			 for (j=0;j<x;j++) { cout << an[i][j]; if (j<x-1) cout << ' ';} 
			 cout << endl;
		      }
		  }
		}
			 
	 return 0;
 }