#include <bits/stdc++.h>
using namespace std;
int size_n, size_m, size_k;
char result[505][505];
int cur[505][505], cx[4] = {1, -1, 0, 0}, cy[4] = {0, 0, 1, -1};
vector<pair<int, int> > toDel(0);
queue<pair<int, int> > q;
pair<int, int> findFree();
void toNext(int x, int y);
int main() {
  int ii, jj;
  pair<int, int> tmp;
  string str;
  cin >> size_n >> size_m >> size_k;
  cin.ignore();
  for (ii = 1; ii <= size_n; ii++) {
    getline(cin, str);
    str = " " + str;
    for (jj = 1; jj <= size_m; jj++) {
      result[ii][jj] = str[jj];
      if (result[ii][jj] == '.')
        cur[ii][jj] = 1;
      else
        cur[ii][jj] = 0;
    }
  }
  while (size_k) {
    tmp = findFree();
    if (tmp.first != -1) {
      toDel.clear();
      cur[tmp.first][tmp.second] = 2;
      toDel.push_back(tmp);
      toNext(tmp.first, tmp.second);
      for (ii = (toDel.size() - 1); (ii > -1) && size_k; ii--, size_k--)
        result[toDel[ii].first][toDel[ii].second] = 'X';
    }
  }
  for (ii = 1; ii <= size_n; ii++) {
    for (jj = 1; jj <= size_m; jj++) cout << result[ii][jj];
    cout << endl;
  }
  return 0;
}
pair<int, int> findFree() {
  int ii, jj;
  int resX = -1, resY = -1;
  for (ii = 1; ii <= size_n; ii++) {
    for (jj = 1; jj <= size_m; jj++) {
      if (cur[ii][jj] == 1) return make_pair(ii, jj);
    }
  }
  return make_pair(resX, resY);
}
void toNext(int x, int y) {
  int ii;
  pair<int, int> c;
  for (ii = 0; ii < 4; ii++) {
    c.first = x + cx[ii];
    c.second = y + cy[ii];
    if (cur[c.first][c.second] == 1) {
      q.push(make_pair(c.first, c.second));
      toDel.push_back(make_pair(c.first, c.second));
      cur[c.first][c.second] = cur[x][y] + 1;
    }
  }
  while (!q.empty()) {
    c = q.front();
    q.pop();
    toNext(c.first, c.second);
  }
}
