#include <iostream>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

vector<int> sx[101],sy[101],ex[101],ey[101];
int W,H,K;
int ans_cnt = 0;
int used[10][10];
int ans[10][10];
int current[10][10];
void f(int pos){
	if(pos == K+1){
		int ok = 1;
		for(int i = 0 ; i < H ; i++)
			for(int j = 0 ; j < W ; j++)
				ok &= used[i][j] == 1;
		if(ok){
			for(int i = 0 ; i < H ; i++)
				for(int j = 0 ; j < W ; j++)
					ans[i][j] = current[i][j];
			ans_cnt++;
		}
		return;
	}
	if(ans_cnt >= 2) return;
	for(int i = 0 ; i < sx[pos].size() ; i++){
		int ok = 1;
		for(int x = sx[pos][i] ; x < ex[pos][i] ; x++){
			for(int y = sy[pos][i] ; y < ey[pos][i] ; y++){
				ok &= used[y][x] == 0;
			}
		}
		if(ok){
			for(int x = sx[pos][i] ; x < ex[pos][i] ; x++){
				for(int y = sy[pos][i] ; y < ey[pos][i] ; y++){
					used[y][x] = 1;
					current[y][x] = pos;
				}
			}
			f(pos+1);
			for(int x = sx[pos][i] ; x < ex[pos][i] ; x++){
				for(int y = sy[pos][i] ; y < ey[pos][i] ; y++){
					used[y][x] = 0;
					current[y][x] = 0;
				}
			}
		}
	}
}
int main(){
	int d[10][10];
	int sz[101];
	while(cin >> W >> H >> K && W){
		for(int i = 0 ; i < 101 ; i++){
			sx[i].clear(); sy[i].clear(); ex[i].clear(); ey[i].clear();
		}
		map<int,int> from,to;
		from[0] = 0; // dummy
		for(int i = 0 ; i < K ; i++){
			int t,s;
			cin >> t >> s;
			to[t] = from.size();
			from[to[t]] = t;
			sz[to[t]] = s;
		}
		for(int i = 0 ; i < H ; i++){
			for(int j = 0 ; j < W ; j++){
				cin >> d[i][j];
				d[i][j] = to[d[i][j]];			
			}
		}
		for(int h = 1 ; h <= H ; h++){
			for(int w = 1 ; w <= W ; w++){
				for(int i = 0 ; i <= H - h ; i++){
					for(int j = 0 ; j <= W - w ; j++){
						int c = -1 , cnt = 0;
						for(int k = 0 ; k < h ; k++){
							for(int l = 0 ; l < w ; l++){
								if(d[i+k][j+l] != 0){
									c = d[i+k][j+l];
									cnt++;
								}
							}
						}
						if(cnt == 1 && sz[c] == w*h){
							sx[c].push_back(j);
							sy[c].push_back(i);
							ex[c].push_back(j+w);
							ey[c].push_back(i+h);
						}
					}
				}
			}
		}
		ans_cnt = 0;
		for(int i = 0 ; i < 10 ; i++)
			for(int j = 0 ; j < 10 ; j++) used[i][j] = 0;
		f(1);
		if(ans_cnt == 1){
			for(int i = 0 ; i < H ; i++){
				for(int j = 0 ; j < W ; j++){
					cout << from[ans[i][j]] << (j==W-1?"\n":" ");
				}
			}
		}else{
			cout << "NA" << endl;
		}
	}
}