#include <bits/stdc++.h>
using namespace std;
long long int gcd(long long int a, long long int b) {
  if (!b) return a;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a / gcd(a, b)) * b;
}
long long int modexp(long long int a, long long int b) {
  if (b == 0) return 1;
  if (b == 1) return a;
  long long int temp = modexp(a, (b >> 1));
  temp = (temp * temp);
  return (temp * modexp(a, b & 1));
}
long long int modexp(long long int a, long long int b, long long int m) {
  if (b == 0) return 1;
  if (b == 1) return a % m;
  long long int temp = modexp(a, (b >> 1), m);
  temp = (temp * temp) % m;
  return (temp * modexp(a, b & 1, m)) % m;
}
long long int mult(long long int a, long long int b, long long int m) {
  long long int res = 0;
  a %= m;
  while (b) {
    if (b & 1ll) res = (res + a) % m;
    a = (a * 2ll) % m;
    b /= 2ll;
  }
  return (res % m);
}
long long int modinv(long long int a, long long int p) {
  return modexp(a, p - 2, p);
}
long long int S(long long int x) { return (x * (x + 1)) / 2ll; }
vector<pair<int, int> > l;
string yy[505];
int tim[505][505];
vector<pair<int, int> > adj[505][505];
bool visit[505][505];
bool mk[505][505];
void dfs(int x, int y, int tm) {
  visit[x][y] = true;
  tim[x][y] = tm;
  int n = adj[x][y].size();
  int cnt = 0;
  for (int i = 0; i < n; ++i) {
    int xx = adj[x][y][i].first;
    int yy = adj[x][y][i].second;
    if (visit[xx][yy])
      cnt++;
    else {
      dfs(xx, yy, tm + 1);
    }
    if (cnt == n) {
      mk[x][y] = true;
      l.push_back(make_pair(x, y));
      return;
    }
  }
  int ct = 0, cw = 0;
  for (int i = 0; i < n; ++i) {
    int xx = adj[x][y][i].first;
    int yy = adj[x][y][i].second;
    if (tim[xx][yy] > tim[x][y] and mk[xx][yy]) cw++;
    if (tim[xx][yy] > tim[x][y]) ct++;
  }
  if (ct == cw) {
    mk[x][y] = true;
    l.push_back(make_pair(x, y));
  }
}
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; ++i) cin >> yy[i];
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) {
      visit[i][j] = false;
      mk[i][j] = false;
    }
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      if (yy[i][j] == '.') {
        if (j > 0 and yy[i][j - 1] == '.')
          adj[i][j].push_back(make_pair(i, j - 1));
        if (j < m - 1 and yy[i][j + 1] == '.')
          adj[i][j].push_back(make_pair(i, j + 1));
        if (i > 0 and yy[i - 1][j] == '.')
          adj[i][j].push_back(make_pair(i - 1, j));
        if (i < n - 1 and yy[i + 1][j] == '.')
          adj[i][j].push_back(make_pair(i + 1, j));
      }
    }
  }
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
      if (yy[i][j] == '.') dfs(i, j, 0);
  for (int i = 0; i < k; ++i) yy[l[i].first][l[i].second] = 'X';
  for (int i = 0; i < n; ++i) cout << yy[i] << '\n';
}
