#include <bits/stdc++.h>
using namespace std;
const int BIG = 1e5 + 9;
const int INF = 1e9 + 9;
const long long BINF = 1e18 + 9;
const double SML = (1e-7);
int n, m, k, org_level[509][509], dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1};
char a[509][509];
bool visited[509][509];
bool valid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; }
class Graph {
 public:
  map<pair<int, int>, set<pair<int, int> > > adj;
  vector<set<pair<int, int> > > level;
  int max_level;
  void bfs(int x, int y) {
    queue<pair<int, int> > q;
    visited[x][y] = true;
    max_level = org_level[x][y] = 0;
    set<pair<int, int> > s;
    level.push_back(s);
    level.back().insert({x, y});
    q.push({x, y});
    while (!q.empty()) {
      pair<int, int> p = q.front();
      q.pop();
      for (int i = 0; i < 4; i++) {
        int tox = p.first + dx[i];
        int toy = p.second + dy[i];
        if (valid(tox, toy)) {
          if (!visited[tox][toy] && a[tox][toy] == '.') {
            visited[tox][toy] = true;
            adj[{p.first, p.second}].insert({tox, toy});
            org_level[tox][toy] = org_level[p.first][p.second] + 1;
            if (org_level[tox][toy] >= level.size()) {
              level.push_back(s);
              level.back().insert({tox, toy});
            } else {
              level[org_level[tox][toy]].insert({tox, toy});
            }
            max_level = max(max_level, org_level[tox][toy]);
            q.push({tox, toy});
          }
        }
      }
    }
  }
};
vector<Graph> v;
set<pair<int, int> >::iterator it;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> a[i][j];
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (a[i][j] == '.' && !visited[i][j]) {
        Graph g;
        g.bfs(i, j);
        v.push_back(g);
      }
    }
  }
  for (int i = 0; i < v.size() && k > 0; i++) {
    if (v[i].max_level == 0) {
      it = v[i].level[0].begin();
      pair<int, int> p = *it;
      a[p.first][p.second] = 'X';
      k--;
    } else {
      for (int j = v[i].max_level; j >= 0 && k > 0; j--) {
        for (it = v[i].level[j].begin(); it != v[i].level[j].end() && k > 0;
             it++) {
          pair<int, int> p = *it;
          a[p.first][p.second] = 'X';
          k--;
        }
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cout << a[i][j];
    }
    cout << "\n";
  }
  return 0;
}
