#include <bits/stdc++.h>
using namespace std;
char maps[550][550];
bool flg[550][550] = {0};
int m, n;
int xx = -1, yy = -1;
void dfs(int x, int y) {
  if (x < 0 || x >= n) return;
  if (y < 0 || y >= m) return;
  if (flg[x][y] == 1 || maps[x][y] == '#') return;
  flg[x][y] = 1;
  if (xx != -1) return;
  dfs(x + 1, y);
  if (xx != -1) return;
  dfs(x, y + 1);
  if (xx != -1) return;
  dfs(x - 1, y);
  if (xx != -1) return;
  dfs(x, y - 1);
  xx = x;
  yy = y;
}
int main() {
  int t, i, j, k, l, a, b;
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &k);
  for (i = 0; i < n; i++) scanf("%s", maps[i]);
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) {
      if (maps[i][j] == '.') {
        dfs(i, j);
        break;
      }
    }
  queue<int> qx;
  queue<int> qy;
  stack<int> xxxx;
  stack<int> yyyy;
  qx.push(xx);
  qy.push(yy);
  memset(flg, 0, sizeof flg);
  flg[xx][yy] = 1;
  while (!qx.empty()) {
    a = qx.front();
    b = qy.front();
    qx.pop();
    qy.pop();
    xxxx.push(a);
    yyyy.push(b);
    if (a - 1 >= 0 && flg[a - 1][b] == 0 && maps[a - 1][b] == '.') {
      flg[a - 1][b] = 1;
      qx.push(a - 1);
      qy.push(b);
    }
    if (b - 1 >= 0 && flg[a][b - 1] == 0 && maps[a][b - 1] == '.') {
      flg[a][b - 1] = 1;
      qx.push(a);
      qy.push(b - 1);
    }
    if (a + 1 < n && flg[a + 1][b] == 0 && maps[a + 1][b] == '.') {
      flg[a + 1][b] = 1;
      qx.push(a + 1);
      qy.push(b);
    }
    if (b + 1 < m && flg[a][b + 1] == 0 && maps[a][b + 1] == '.') {
      flg[a][b + 1] = 1;
      qx.push(a);
      qy.push(b + 1);
    }
  }
  while (k--) {
    a = xxxx.top();
    b = yyyy.top();
    xxxx.pop();
    yyyy.pop();
    maps[a][b] = 'X';
  }
  for (i = 0; i < n; i++) printf("%s\n", maps[i]);
  return 0;
}
