#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, k, l, art[505][505], low[505][505], used[505][505], ans, cn, t,
    x, y, z, mx, mn, s, timer, vis[505][505];
char c[505][505], d[1000009], ch;
void dfs(int row, int col) {
  timer++;
  used[row][col] = 1;
  if ((row - 1 >= 0) && (used[row - 1][col] == 0) && (timer < s) &&
      (c[row - 1][col] == '.')) {
    dfs(row - 1, col);
  }
  if ((col - 1 >= 0) && (used[row][col - 1] == 0) && (timer < s) &&
      (c[row][col - 1] == '.')) {
    dfs(row, col - 1);
  }
  if ((row + 1 < n) && (used[row + 1][col] == 0) && (timer < s) &&
      (c[row + 1][col] == '.')) {
    dfs(row + 1, col);
  }
  if ((col + 1 < m) && (used[row][col + 1] == 0) && (timer < s) &&
      (c[row][col + 1] == '.')) {
    dfs(row, col + 1);
  }
}
int main() {
  while (scanf("%d %d %d", &n, &m, &k) != EOF) {
    x = y = s = 0;
    timer = 1;
    for (i = 0; i < n; i++) {
      scanf("%s", c[i]);
      for (j = 0; j < m; j++) {
        if (c[i][j] == '.') {
          s++;
          x = i;
          y = j;
        }
      }
    }
    s -= k;
    memset(used, 0, sizeof(used));
    timer = 0;
    dfs(x, y);
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) {
        if ((used[i][j] == 0) && (c[i][j] == '.')) {
          k--;
          printf("X");
        } else {
          printf("%c", c[i][j]);
        }
      }
      printf("\n");
    }
  }
  return 0;
}
