#include <bits/stdc++.h>
using namespace std;
const int INF = 1e8;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
const int MAX_W = 800, MAX_H = 800;
int H, W, K;
char A[MAX_H][MAX_W];
int dist[MAX_H][MAX_W + 1];
int roundup(int x, int y) { return (x + y - 1) / y; }
int main() {
  cin >> H >> W >> K;
  for (int i = (0); i < (H); i++) {
    cin >> A[i];
  }
  queue<pair<int, int> > que;
  for (int h = (0); h < (H); h++) {
    for (int w = (0); w < (W); w++) {
      dist[h][w] = INF;
      if (A[h][w] == 'S') {
        que.push(pair<int, int>(h, w));
        dist[h][w] = 0;
      }
    }
  }
  while (!que.empty()) {
    pair<int, int> p = que.front();
    que.pop();
    int h = p.first;
    int w = p.second;
    for (int i = (0); i < (4); i++) {
      int h2 = h + dy[i], w2 = w + dx[i];
      if (0 <= h2 && h2 < H && 0 <= w2 && w2 < W && A[h2][w2] != '#' &&
          dist[h][w] + 1 < dist[h2][w2]) {
        dist[h2][w2] = dist[h][w] + 1;
        que.push(pair<int, int>(h2, w2));
      }
    }
  }
  int ans = INF;
  for (int h = (0); h < (H); h++) {
    for (int w = (0); w < (W); w++) {
      if (dist[h][w] <= K) {
        ans = min({ans, roundup(h, K), roundup(w, K), roundup(H - 1 - h, K),
                   roundup(W - 1 - w, K)});
      }
    }
  }
  cout << ans + 1 << endl;
  return 0;
}
