#include<iostream>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int w,h,n,a[16],m[10][10],bx[16],by[16],mans[10][10],ans;
void dfs(int c){
	if(c==n+1){
		rep(i,h)rep(j,w)mans[i][j]=m[i][j];
		ans++;return;
	}
	for(int i=1;i<=a[c];i++)if(a[c]%i==0){
		int x=i,y=a[c]/i;
		rep(j,x)rep(k,y){
			int l=bx[c]-j,r=l+x,t=by[c]-k,b=t+y;
			if(l<0||r>w||t<0||b>h)continue;
			for(int ii=l;ii<r;ii++)for(int jj=t;jj<b;jj++)if(m[jj][ii]!=0&&m[jj][ii]!=c)goto NEXT;
			for(int ii=l;ii<r;ii++)for(int jj=t;jj<b;jj++)m[jj][ii]=c;
			dfs(c+1);
			for(int ii=l;ii<r;ii++)for(int jj=t;jj<b;jj++)m[jj][ii]=0;
			m[by[c]][bx[c]]=c;
			NEXT:;
		}
	}
}
int main(){
	while(cin>>w>>h>>n,w){
		int t,u,sum=0;
		rep(i,n)cin>>t>>u,a[t]=u,sum+=u;
		rep(i,h)rep(j,w){
			cin>>t;m[i][j]=t;
			if(t!=0)bx[t]=j,by[t]=i;
		}
		if(sum!=w*h)goto FAIL;
		ans=0;dfs(1);
		if(ans==1){
			rep(i,h)rep(j,w)cout<<mans[i][j]<<(j==w-1?'\n':' ');
			continue;
		}
		FAIL:cout<<"NA"<<endl;
	}
	return 0;
}