#include <bits/stdc++.h>
using namespace std;
typedef struct {
  int i;
  int j;
} AXIS;
AXIS D[] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
bool DFS(char maze[][505], AXIS S, int &k, int &n, int &m) {
  maze[S.i][S.j] = '*';
  if (!k) return 0;
  for (int i = 0; i < 4; i++) {
    AXIS next;
    next.i = S.i + D[i].i;
    next.j = S.j + D[i].j;
    if (maze[next.i][next.j] == '.' && 0 <= next.i && next.i < n &&
        0 <= next.j && next.j < m && DFS(maze, next, k, n, m)) {
      maze[next.i][next.j] = 'X';
      k--;
    }
    if (!k) return 0;
  }
  return 1;
}
int main() {
  int n, m, k;
  char maze[505][505];
  AXIS start = {-1, -1};
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> maze[i][j];
      if (start.i < 0 && maze[i][j] == '.') {
        start.i = i;
        start.j = j;
      }
    }
  }
  DFS(maze, start, k, n, m);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (maze[i][j] == '*') {
        cout << '.';
      } else {
        cout << maze[i][j];
      }
    }
    cout << endl;
  }
  return 0;
}
