#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int rd[4] = {1, 0, -1, 0};
const int cd[4] = {0, 1, 0, -1};
int h, w, k, sr, sc, d[805][805], res = inf;
char a[805][805];
inline bool inside(int r, int c) { return r >= 0 && r < h && c >= 0 && c < w; }
inline int casts(int r, int c) {
  int x0 = c, x1 = w - c - 1, y0 = r, y1 = h - r - 1;
  return (min(min(x0, x1), min(y0, y1)) + k - 1) / k;
}
int main() {
  memset(d, -1, sizeof d);
  scanf("%d %d %d", &h, &w, &k);
  for (int i = 0; i < h; i++) {
    scanf("%s", a[i]);
    for (int j = 0; j < w; j++)
      if (a[i][j] == 'S') sr = i, sc = j;
  }
  queue<pair<int, int> > q;
  q.push(make_pair(sr, sc));
  d[sr][sc] = 0;
  while (!q.empty()) {
    pair<int, int> p = q.front();
    q.pop();
    res = min(res, casts(p.first, p.second) + 1);
    if (d[p.first][p.second] == k) continue;
    for (int k = 0; k < 4; k++) {
      int rr = p.first + rd[k], cc = p.second + cd[k];
      if (!inside(rr, cc) || a[rr][cc] == '#') continue;
      if (d[rr][cc] != inf) continue;
      q.push(make_pair(rr, cc));
      d[rr][cc] = d[p.first][p.second] + 1;
    }
  }
  printf("%d\n", res);
  return 0;
}
