#include <bits/stdc++.h>
using namespace std;
int visited[501][501], c = 0;
char a[501][501];
void dfs(int x, int y, int k, int s) {
  visited[x][y] = 1;
  if (c < s - k) {
    c++;
    a[x][y] = 1;
  }
  if (!visited[x - 1][y] && a[x - 1][y] == '.') {
    dfs(x - 1, y, k, s);
  }
  if (!visited[x + 1][y] && a[x + 1][y] == '.') {
    dfs(x + 1, y, k, s);
  }
  if (!visited[x][y - 1] && a[x][y - 1] == '.') {
    dfs(x, y - 1, k, s);
  }
  if (!visited[x][y + 1] && a[x][y + 1] == '.') {
    dfs(x, y + 1, k, s);
  }
}
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
    }
  }
  int s = 0, x = 0, y = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (a[i][j] == '.') {
        s++;
        x = i;
        y = j;
      }
      visited[i][j] = 0;
    }
  }
  if (k != 0 && s != 0) {
    dfs(x, y, k, s);
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        if (a[i][j] == 1)
          a[i][j] = '.';
        else if (a[i][j] == '.')
          a[i][j] = 'X';
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << a[i][j];
    }
    cout << endl;
  }
}
