#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <complex>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cmath>
#include <queue>
#include <map>
using namespace std;

#define REP(i,n) for(int i=0;i<(int)n;++i)
#define FOR(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define ALL(c) (c).begin(), (c).end()
const int INF = 1<<30;

typedef pair<int,int> pii;
typedef vector<vector<int> > mat;

mat ans(10,vector<int>(10));
int memo[15], memo2[15], memo3[15];
pii basyo[15];
int X, Y, n;
int ansnum;

void solve(mat ba, int d) {
  if (d == n) {
    ans = ba;
    ansnum++;
    return ;
  }
  for (int XX=1; XX<=memo[d]; ++XX) {
    if (memo[d] % XX) continue;
    int YY = memo[d] / XX;
    REP(yy, YY) {
      REP(xx, XX) {
        bool f = 0;
        REP(yyy, YY) {
          REP(xxx, XX) {
            int x = basyo[d].first - xx + xxx;
            int y = basyo[d].second - yy + yyy;

            if (x < 0 || X <= x || y < 0 || Y <= y) {
              f = 1;
            } else if (ba[x][y] != d && ba[x][y] != -1)
              f = 1;
          }
        }
        // ツつ「ツつッツづゥ
        if (!f) {
          mat tmp = ba;
          REP(yyy, YY) {
            REP(xxx, XX) {
              int x = basyo[d].first - xx + xxx;
              int y = basyo[d].second - yy + yyy;
              tmp[x][y] = d;
            }
          }
          solve(tmp, d+1);
        }
      }
    }
  }
}
  
  
int main() {
  mat ba(10, vector<int>(10));
  while(cin >> X >> Y >> n, X+Y+n) {
    vector<pii> P(n);
    REP(i,n) {
      int b, k;
      cin >> b >> k;
      P[i] = make_pair(k,b);
    }
    sort(ALL(P), greater<pii>());
    REP(i,n) {
      memo[i] = P[i].first;
      memo2[P[i].second] = i;
      memo3[i] = P[i].second;
    }
    REP(y, Y) {
      REP(x, X) {
        cin >> ba[x][y];
        if (ba[x][y] > 0) {
          ba[x][y] = memo2[ba[x][y]];
          basyo[ba[x][y]] = pii(x,y);
        } else
          ba[x][y] = -1;
      }
    }
    ansnum = 0;
    solve(ba, 0);
    if (ansnum == 1) {
      REP(y,Y) {
        REP(x,X) {
          if (x) cout << " ";
          cout << memo3[ans[x][y]];
        }
        cout << endl;
      }
    } else
      cout << "NA" << endl;
  }
}