#include <bits/stdc++.h>
using namespace std;
const int maxn = 810;
int n, m, k;
char cmap[maxn][maxn];
pair<int, int> start;
queue<pair<int, int> > q;
bool firach[maxn][maxn];
const int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};
bool isvalid(int x, int y) { return x >= 0 && x < n && y >= 0 && y < m; }
void bfs() {
  while (!q.empty()) {
    pair<int, int> t = q.front();
    q.pop();
    int nx = t.first, ny = t.second;
    for (int k = 0; k < 4; k++) {
      int tx = nx + dx[k], ty = ny + dy[k];
      if (!isvalid(tx, ty)) continue;
      if (firach[tx][ty]) continue;
      if (cmap[tx][ty] == '#') continue;
      firach[tx][ty] = true;
      q.push(make_pair(tx, ty));
    }
  }
}
int MinDir(int x, int y) {
  int a1 = x / k;
  if (x % k) ++a1;
  int a2 = (n - x - 1) / k;
  if ((n - x - 1) % k) ++a2;
  int a3 = y / k;
  if (y % k) ++a3;
  int a4 = (m - y - 1) / k;
  if ((m - y - 1) % k) ++a4;
  return min(a1, min(a2, min(a3, a4)));
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; i++) scanf("%s", cmap[i]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      if (cmap[i][j] == 'S') {
        start = make_pair(i, j);
      }
    }
  q.push(start);
  firach[start.first][start.second] = true;
  bfs();
  int ans = (1e9);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      if (firach[i][j]) ans = min(ans, MinDir(i, j));
  printf("%d", ans + 1);
  return 0;
}
