#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int rest_k;
char maze[500][500];
int visited[500][500];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, -1, 0, 1};
bool safe(int x, int y) { return (0 <= x && x < n && 0 <= y && y < m); }
void dfs(int x, int y) {
  if (rest_k == 0) return;
  if (!safe(x, y)) return;
  if (maze[x][y] == 'X' || maze[x][y] == '#') return;
  visited[x][y] = 1;
  for (int i = 0; i < 4; i++)
    if (!visited[x + dx[i]][y + dy[i]]) dfs(x + dx[i], y + dy[i]);
  int not_walls = 0;
  for (int i = 0; i < 4; i++) {
    int new_x = x + dx[i];
    int new_y = y + dy[i];
    if (safe(new_x, new_y) && maze[new_x][new_y] == '.' &&
        !visited[new_x][new_y])
      not_walls++;
  }
  if (not_walls <= 1 && rest_k > 0) {
    maze[x][y] = 'X';
    rest_k--;
  }
}
int main() {
  cin >> n >> m >> k;
  rest_k = k;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) cin >> maze[i][j];
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (maze[i][j] == '.') {
        dfs(i, j);
        break;
      }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) cout << maze[i][j];
    cout << endl;
  }
  return 0;
}
