#include <bits/stdc++.h>
using namespace std;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
char ma[888][888];
int n, m, k, dist[888][888], pis[888][888], mn;
queue<pair<int, int> > q;
bool In(int x, int y) { return (x >= 0 && x < n && y >= 0 && y < m); }
int main() {
  mn = 1e9;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; i++) scanf("%s", ma[i]);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      pis[i][j] = min(min(i, j), min(n - i - 1, m - j - 1));
      pis[i][j] = (pis[i][j] + k - 1) / k;
    }
  }
  memset(dist, -1, sizeof(dist));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (ma[i][j] == 'S') {
        q.push(make_pair(i, j));
        dist[i][j] = 0;
        mn = min(mn, pis[i][j] + 1);
      }
    }
  }
  while (!q.empty()) {
    int x = q.front().first, y = q.front().second;
    q.pop();
    if (dist[x][y] == k) break;
    for (int i = 0; i < 4; i++) {
      int xx = x + dx[i], yy = y + dy[i];
      if (In(xx, yy) && ma[xx][yy] == '.' && dist[xx][yy] == -1) {
        mn = min(mn, pis[xx][yy] + 1);
        dist[xx][yy] = dist[x][y] + 1;
        q.push(make_pair(xx, yy));
      }
    }
  }
  printf("%d\n", mn);
  return 0;
}
