#include <bits/stdc++.h>
using namespace std;
int n, m, k, sum = 0;
struct Node {
  int x;
  int y;
} node;
int X[4] = {1, -1, 0, 0};
int Y[4] = {0, 0, -1, 1};
char a[600][600];
int b[600][600] = {0};
bool panduan(int x, int y) {
  if (a[x][y] == '.' && b[x][y] == 0)
    return true;
  else
    return false;
}
void bfs(int x, int y) {
  b[x][y] = 1;
  queue<Node> q;
  node.x = x;
  node.y = y;
  q.push(node);
  while (!q.empty() && sum > 0) {
    Node top = q.front();
    q.pop();
    for (int i = 0; i < 4; i++) {
      int newx = top.x + X[i];
      int newy = top.y + Y[i];
      if (panduan(newx, newy)) {
        node.x = newx, node.y = newy;
        q.push(node);
        b[newx][newy] = 1;
        sum--;
        if (sum == 0) return;
      }
    }
  }
}
int main() {
  int bx, by;
  int flag = 0;
  scanf("%d%d%d\n", &n, &m, &k);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      scanf("%c", &a[i][j]);
      if (a[i][j] == '.') {
        sum++;
        bx = i;
        by = j;
      }
    }
    getchar();
  }
  sum = sum - k;
  sum--;
  bfs(bx, by);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (b[i][j] == 0 && a[i][j] == '.')
        printf("X");
      else
        printf("%c", a[i][j]);
    }
    printf("\n");
  }
  return 0;
}
