#include <bits/stdc++.h>
using namespace std;
void print_d(int n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 10;
  char output_buffer[10];
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 10);
}
void print_ld(long n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 11;
  char output_buffer[11];
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 11);
}
void print_lld(long long n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 21;
  char output_buffer[21];
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 21);
}
void print_llu(long long unsigned n) {
  int i = 21;
  char output_buffer[21];
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 21);
}
void println_d(int n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 10;
  char output_buffer[11];
  output_buffer[10] = '\n';
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 11);
}
void println_ld(long n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 11;
  char output_buffer[12];
  output_buffer[11] = '\n';
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 12);
}
void println_lld(long long n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 21;
  char output_buffer[22];
  output_buffer[21] = '\n';
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 22);
}
void println_llu(long long unsigned n) {
  int i = 21;
  char output_buffer[22];
  output_buffer[21] = '\n';
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 22);
}
char sp;
void printsp_d(int n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 10;
  char output_buffer[11];
  output_buffer[10] = sp;
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 11);
}
void printsp_ld(long n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 11;
  char output_buffer[12];
  output_buffer[11] = sp;
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 12);
}
void printsp_lld(long long n) {
  if (n < 0) {
    n = -n;
    putchar('-');
  }
  int i = 21;
  char output_buffer[22];
  output_buffer[21] = sp;
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 22);
}
void printsp_llu(long long unsigned n) {
  int i = 21;
  char output_buffer[22];
  output_buffer[21] = sp;
  do {
    output_buffer[--i] = (n % 10) + '0';
    n /= 10;
  } while (n);
  do {
    putchar(output_buffer[i]);
  } while (++i < 22);
}
long long k, res, val[1005][1005];
bool vis[1005][1005];
pair<pair<int, int>, long long> x[1000005];
pair<int, int> parent[1005][1005];
int siz[1005][1005], Rank[1005][1005], xadd[4] = {-1, 1, 0, 0},
                                       yadd[4] = {0, 0, -1, 1}, cou, n, m, a, b;
bool comp(pair<pair<int, int>, int> a1, pair<pair<int, int>, int> a2) {
  return a1.second > a2.second;
}
pair<int, int> find(pair<int, int> cur) {
  int a = cur.first, b = cur.second;
  if (parent[a][b] == cur) return cur;
  return parent[a][b] = find(parent[a][b]);
}
void Union(pair<int, int> x, pair<int, int> y) {
  pair<int, int> xroot = find(x);
  pair<int, int> yroot = find(y);
  if (xroot == yroot) return;
  int a = xroot.first, b = xroot.second, a1 = yroot.first, b1 = yroot.second;
  int temp = siz[a][b];
  siz[a][b] += siz[a1][b1];
  siz[a1][b1] += temp;
  if (Rank[a][b] < Rank[a1][b1])
    parent[a][b] = yroot;
  else if (Rank[a][b] > Rank[a1][b1])
    parent[a1][b1] = xroot;
  else
    Rank[a][b]++, parent[a1][b1] = xroot;
}
void dfs(int a, int b, long long req, int nos) {
  vis[a][b] = true;
  if (val[a][b] >= req) ++cou, val[a][b] = req;
  for (int i = 0; i < 4; i++) {
    int a1 = a + xadd[i], b1 = b + yadd[i];
    if (a1 < 0 || a1 > n || b1 < 0 || b1 > m) continue;
    if (!vis[a1][b1] && val[a1][b1] >= req && cou < nos) dfs(a1, b1, req, nos);
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  bool ans = false;
  cin >> n >> m >> k;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      cin >> val[i][j];
      x[i * m + j - m - 1].second = val[i][j];
      x[i * m + j - m - 1].first.first = i,
                        x[i * m + j - m - 1].first.second = j;
    }
  sort(x, x + n * m, comp);
  for (int i = 0; i < n * m; i++) {
    int a = x[i].first.first, b = x[i].first.second;
    siz[a][b] = 1;
    parent[a][b] = make_pair(a, b);
    for (int j = 0; j < 4; j++) {
      int a1 = a + xadd[j], b1 = b + yadd[j];
      if (siz[a1][b1]) Union(make_pair(a, b), make_pair(a1, b1));
    }
    pair<int, int> fin = find(make_pair(a, b));
    if (x[i].second && k % x[i].second == 0 &&
        x[i].second * siz[fin.first][fin.second] >= k) {
      ans = true;
      dfs(a, b, x[i].second, k / x[i].second);
      res = x[i].second;
      break;
    }
  }
  if (!ans)
    cout << "NO" << endl;
  else {
    cout << "YES" << endl;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (vis[i][j] && val[i][j] == res)
          cout << res << ' ';
        else
          cout << 0 << ' ';
      }
      cout << endl;
    }
  }
}
