#include <iostream>
#include <map>
#include <vector>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
typedef pair< pair<int,int>,pair<int,int> > NODE;
#define NY first.first
#define NX first.second
#define SY second.first
#define SX second.second

int X,Y,n,ret;
vector< vector<int> > solve;
map<int,vector<NODE> > able;
vector< vector<int> > data(20,vector<int>(20));
vector< vector<int> > none(20,vector<int>(20));
vector< vector<int> > rec(20,vector<int>(20));

void bt(int dp){
	if(ret>1)return;
	vector<vector<int> > tt = rec;
	bool flag;
	if(dp==n){
		flag = true;
		rep(i,Y)rep(j,X)if(!rec[i][j])flag = false;
		if(flag){
			ret++;
			solve = rec;
		}
		return;
	}
	map<int,vector<NODE> >::iterator it = able.begin();
	for(int i=0;i<dp;i++)it++;
	for(int i=0;i<(*it).second.size();i++){
		flag = true;
		rep(y,(*it).second[i].SY)rep(x,(*it).second[i].SX){
			if(rec[(*it).second[i].NY+y][(*it).second[i].NX+x])flag = false;
			rec[(*it).second[i].NY+y][(*it).second[i].NX+x]=(*it).first;
		}
		if(flag)bt(dp+1);
		rec = tt;
	}
	return;
}

int main()
{
	map<int,int> buy;
	
	int b,k;
	int name,cnt;
	pair<int,int> coord;
	while(cin >> X >> Y >> n , X){
		ret = 0;/*	rep(i,Y){
		rep(j,X)cout << rec[i][j];
		cout << endl;
	}
*/
		able.clear();
		buy.clear();
		rep(i,Y)rep(j,X)data[i][j]=0;
		rep(i,n){
			cin >> b >> k;
			buy[b] = k;
		}
		rep(i,Y)rep(j,X)cin >> data[i][j];

		rep(i,Y)rep(j,X){
			rep(y,Y)rep(x,X){
				if( j+x > X-1 || i+y > Y-1 )continue;
				cnt = 0;
				rep(YY,i+1)rep(XX,j+1)
					if(data[y+YY][x+XX]){
						cnt++;
						name = data[y+YY][x+XX];
						coord = make_pair(y,x);
					}
				if(cnt == 1 && (i+1)*(j+1) == buy[name] ){
					able[name].push_back( make_pair(coord,make_pair(i+1,j+1)) );
				}
			}
		}
/*		map<int,vector<NODE> >::iterator it = able.begin();
		while(it != able.end()){
			for(int i=0;i<(*it).second.size();i++)
				cout << (*it).first << "=" << (*it).second[i].NX << "," << (*it).second[i].NY << " -> " << (*it).second[i].SX << "," << (*it).second[i].SY << endl;
			++it;
		}
*/
		rec = none;
		if(n == able.size() )bt(0);
		if(ret==1){
			rep(i,Y){
				rep(j,X){if(j)cout << " ";cout << solve[i][j];}
				cout << endl;
			}
		}else{
			cout << "NA" << endl;
		}
	}
}