#include <bits/stdc++.h>
using namespace std;
const long long N = 1000003;
long long cnt;
bool cyc;
long long n, m;
long long getid(long long i, long long j) { return i * m + j; }
long long dis[N];
long long sz[N];
void ini() {
  for (long long i = 0; i < N; i++) {
    dis[i] = i;
    sz[i] = 1;
  }
}
long long root(long long x) {
  while (x != dis[x]) {
    dis[x] = dis[dis[x]];
    x = dis[x];
  }
  return x;
}
void unite(long long a, long long b) {
  if (root(a) == root(b)) return;
  sz[root(b)] += sz[root(a)];
  sz[root(a)] = 0;
  dis[root(a)] = root(b);
}
vector<long long> dp[N];
bool vis[N];
bool vis1[N];
long long xx[] = {1, 0, -1, 0};
long long yy[] = {0, -1, 0, 1};
long long sizee;
long long value;
set<long long> gg;
void dfs(long long i) {
  if (gg.size() < sizee) {
    gg.insert(i);
  }
  vis1[i] = true;
  for (long long j : dp[i]) {
    if (!vis1[j] && root(j) == value && vis[i]) dfs(j);
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  set<long long> s;
  cin >> n >> m;
  long long mat[n][m];
  long long k;
  cin >> k;
  memset(vis, false, sizeof vis);
  map<long long, vector<long long>> mp;
  for (long long i = 0; i < n; i++)
    for (long long j = 0; j < m; j++) {
      cin >> mat[i][j];
      mp[mat[i][j]].push_back(getid(i, j));
      s.insert(mat[i][j]);
      for (long long k = 0; k < 4; k++) {
        long long x = xx[k] + i;
        long long y = yy[k] + j;
        if (x < n && x >= 0 && y < m && y >= 0) {
          dp[getid(i, j)].push_back(getid(x, y));
          dp[getid(x, y)].push_back(getid(i, j));
        }
      }
    }
  ini();
  vector<long long> fin;
  for (auto it : s) {
    fin.push_back(it);
  }
  bool found = false;
  reverse(fin.begin(), fin.end());
  long long val = 0;
  long long final;
  if (mp.find(k) != mp.end()) {
    int xx = mp[k][0];
    int x1 = xx / m;
    int y1 = xx % m;
    int answer[n][m];
    memset(answer, 0, sizeof answer);
    answer[x1][y1] = k;
    cout << "YES" << endl;
    for (long long i = 0; i < n; i++) {
      for (long long j = 0; j < m; j++) {
        cout << answer[i][j] << " ";
      }
      cout << endl;
    }
    return 0;
  }
  for (long long curr : fin) {
    for (long long poss : mp[curr]) {
      for (long long nei : dp[poss]) {
        if (vis[nei]) {
          unite(nei, poss);
          if (sz[root(nei)] * curr >= k) {
            if ((k % curr) == 0) {
              found = true;
              final = curr;
              val = root(nei);
              break;
            }
          }
        }
      }
      vis[poss] = true;
      if (found) break;
    }
    if (found) break;
  }
  if (!found) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  memset(vis1, false, sizeof vis1);
  sizee = k / final;
  value = val;
  dfs(val);
  long long answer[n][m];
  memset(answer, 0, sizeof answer);
  for (auto it : gg) {
    long long x1 = it / m;
    long long y1 = it % m;
    answer[x1][y1] = final;
  }
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) {
      cout << answer[i][j] << " ";
    }
    cout << endl;
  }
}
