#include <bits/stdc++.h>
using namespace std;
const int N = 505;
char maze[N][N];
bool vis[N][N];
int nodes;
int n, m, k;
int nodes_done;
int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
bool valid(int x, int y) {
  if (x < 1 || y < 1 || x > n || y > m || maze[x][y] == '#' ||
      vis[x][y] == true)
    return false;
  return true;
}
void dfs(int x, int y) {
  if (nodes_done == nodes - k) return;
  nodes_done++;
  vis[x][y] = true;
  for (int i = 0; i < 4; i++) {
    int x1 = x + dir[i][0];
    int y1 = y + dir[i][1];
    if (valid(x1, y1)) dfs(x1, y1);
  }
}
void Test_case() {
  cin >> n >> m >> k;
  int srcx, srcy;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> maze[i][j];
      if (maze[i][j] == '.') {
        nodes++;
        srcx = i;
        srcy = j;
      }
    }
  }
  dfs(srcx, srcy);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (maze[i][j] == '.' && vis[i][j] == false) maze[i][j] = 'X';
      cout << maze[i][j];
    }
    cout << '\n';
  }
  return;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) {
    Test_case();
  }
}
