#include <bits/stdc++.h>
using namespace std;
const long long N = 2e6 + 5, inf = 1e9 + 7;
long long n, k, kn, A[2005][2005], B[2005][2005], vis[N];
long long p[N];
long long root(long long a) {
  if (p[a] < 0) return a;
  return p[a] = root(p[a]);
}
void merge(long long a, long long b) {
  if ((a = root(a)) == (b = root(b))) return;
  if (p[a] > p[b]) swap(a, b);
  p[a] += p[b];
  p[b] = a;
}
const long long dx[4] = {0, 1, 0, -1};
const long long dy[4] = {1, 0, -1, 0};
inline bool in(long long a, long long b) {
  if (a < 0 || b < 0 || a >= n || b >= k) return 0;
  return 1;
}
void dfs(long long id, long long val, long long roo) {
  if (id != roo && root(id) == root(roo)) return;
  merge(id, roo);
  long long x = id / k, y = id % k, x1, y1, z;
  for (long long i = 0; i < 4; i++) {
    x1 = x + dx[i];
    y1 = y + dy[i];
    z = x1 * k + y1;
    if (in(x1, y1) && A[x1][y1] >= val && root(z) != root(id)) dfs(z, val, roo);
  }
}
long long rem, f;
void dfs2(long long x, long long y) {
  long long x1, y1;
  if (!rem) return;
  B[x][y] = 1;
  rem--;
  for (long long i = 0; i < 4; i++) {
    x1 = x + dx[i];
    y1 = y + dy[i];
    if (in(x1, y1) && A[x1][y1] >= f && B[x1][y1] == 0) dfs2(x1, y1);
  }
}
void print(long long id) {
  cout << "YES\n";
  long long x = id / k, y = id % k;
  rem = kn / A[x][y];
  f = A[x][y];
  dfs2(x, y);
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < k; j++) cout << (B[i][j] ? A[x][y] : 0) << " ";
    cout << "\n";
  }
  exit(0);
}
vector<long long> v, l[N];
unordered_map<long long, long long> m;
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long i, j, a, b, ans = 0, cnt = 0;
  cin >> n >> k >> kn;
  for (i = 0; i < n; i++)
    for (j = 0; j < k; j++) {
      cin >> A[i][j];
      if (kn % A[i][j] == 0) {
        v.emplace_back(A[i][j]);
        if (!m[A[i][j]]) m[A[i][j]] = ++cnt;
        l[m[A[i][j]]].emplace_back(i * k + j);
      }
    }
  memset(p, -1, sizeof p);
  sort(v.begin(), v.end());
  v.erase(unique(v.begin(), v.end()), v.end());
  reverse(v.begin(), v.end());
  for (auto cur : v) {
    a = m[cur];
    for (auto c : l[a])
      if (root(c) == c) dfs(c, cur, c);
    for (auto c : l[a]) {
      if (-p[root(c)] * cur >= kn) print(c);
    }
  }
  cout << "NO";
}
