#include <bits/stdc++.h>
using namespace std;
const int N = 1050;
int n, m, res, dem, Res, pr[N * N], mark[N * N], maxx[N * N];
long long k, a[N][N], re[N][N], b[N * N];
vector<pair<int, int> > vtt[N * N];
vector<int> vt[N * N];
vector<pair<int, pair<int, int> > > adj;
map<int, int> mp;
vector<int> need;
bool ktra = false;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int parent(int x) {
  if (pr[x] < 0) return x;
  return pr[x] = parent(pr[x]);
}
int change(int x, int y) { return m * (x - 1) + y; }
pair<int, int> rechange(int x) {
  int i = x / m + 1;
  int j = x % m;
  if (j == 0) {
    j = m;
    i--;
  }
  return pair<int, int>(i, j);
}
void dfs(int u) {
  dem++;
  mark[u] = 1;
  pair<int, int> aa = rechange(u);
  re[aa.first][aa.second] = Res;
  if (dem == res) return;
  for (int i = 0; i < vt[u].size(); i++) {
    int v = vt[u][i];
    if (mark[v] == 1 || b[v] < Res) continue;
    dfs(v);
    if (dem == res) return;
  }
  if (dem == res) return;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  cin >> k;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) cin >> a[i][j];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      int A = change(i, j);
      adj.push_back(pair<int, pair<int, int> >(a[i][j], pair<int, int>(A, A)));
      b[A] = a[i][j];
      pr[A] = -1;
      for (int l = 0; l < 4; l++) {
        int x = i + dx[l];
        int y = j + dy[l];
        if (x == 0 || x > n || y == 0 || y > m) continue;
        int B = change(x, y);
        int r = min(a[i][j], a[x][y]);
        vt[A].push_back(B);
        adj.push_back(pair<int, pair<int, int> >(r, pair<int, int>(A, B)));
      }
    }
  sort(adj.begin(), adj.end());
  int X = 0;
  int dd = 0;
  for (int i = adj.size() - 1; i >= 0; i--) {
    int w = adj[i].first;
    int u = adj[i].second.first;
    int v = adj[i].second.second;
    if (w != X) {
      need.push_back(w);
      dd++;
      mp[w] = dd;
      X = w;
    }
    int c = parent(u), d = parent(v);
    if (c != d) {
      pr[c] += pr[d];
      pr[d] = c;
    }
    if (b[v] == w) swap(u, v);
    vtt[dd].push_back(pair<int, int>(u, -pr[c]));
    maxx[dd] = max(maxx[dd], -pr[c]);
  }
  for (int i = need.size() - 1; i >= 0; i--) {
    int X = mp[need[i]];
    long long cur = k / need[i];
    if (k % need[i] != 0 || maxx[X] < cur) continue;
    if (cur > m * n) break;
    for (int j = 0; j < vtt[X].size(); j++) {
      if (vtt[X][j].second >= cur) {
        ktra = true;
        res = cur;
        Res = need[i];
        dem = 0;
        dfs(vtt[X][j].first);
        break;
      }
    }
    if (ktra == true) break;
  }
  if (ktra == false) {
    cout << "NO";
    exit(0);
  }
  cout << "YES\n";
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) cout << re[i][j] << " ";
    cout << "\n";
  }
}
