#include<iostream>
using namespace std;
struct State{int x[12][12];};
int H,W,n,b[20],p[20];State S,ans;
int area(State V,int q){
	int mx=100000,my=100000,nx=-1,ny=-1;
	for(int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			if(V.x[i][j]!=q)continue;
			mx=min(mx,i);my=min(my,j);nx=max(nx,i);ny=max(ny,j);
		}
	}
	for(int i=mx;i<=nx;i++){
		for(int j=my;j<=ny;j++){
			if(V.x[i][j]!=q && V.x[i][j]!=0)return 99999999;
		}
	}
	return (nx-mx+1)*(ny-my+1);
}
int solve(State T,int r1,int r2){
	if(r2==W){r1++;r2=0;}
	if(r1==H){ans=T;return 1;}
	if(T.x[r1][r2]>=1){return solve(T,r1,r2+1);}
	else{
		int ret=0;
		for(int i=1;i<=n;i++){
			State U=T;U.x[r1][r2]=i;
			if(area(U,i)>p[i])continue;
			ret+=solve(U,r1,r2+1);
		}
		return ret;
	}
}
int main(){
	while(true){
		cin>>W>>H>>n;if(n==0)break;
		for(int i=0;i<n;i++){cin>>b[i];cin>>p[b[i]];}
		for(int i=0;i<H;i++){
			for(int j=0;j<W;j++)cin>>S.x[i][j];
		}
		int ret=solve(S,0,0);
		if(ret==1){
			for(int i=0;i<H;i++){
				for(int j=0;j<W;j++){
					if(j)cout<<' ';cout<<ans.x[i][j];
				}
				cout<<endl;
			}
		}
		else cout<<"NA"<<endl;
	}
	return 0;
}