#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9, N = 1000, dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};
int n, m, k, x, y;
char c[N][N];
bool vis[N][N];
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < n; i++) {
    scanf("%s", &c[i]);
    for (int j = 0; j < m; j++)
      if (c[i][j] == 'S') x = i, y = j;
  }
  int ans = min(min(x, y), min(n - x - 1, m - y - 1));
  vis[x][y] = 1;
  if (ans % k == 0)
    ans = ans / k;
  else
    ans = ans / k + 1;
  int minv = ans + 1;
  queue<pair<int, pair<int, int> > > q;
  q.push(make_pair(0, make_pair(x, y)));
  while (!q.empty()) {
    pair<int, pair<int, int> > t = q.front();
    q.pop();
    if (t.first >= k) continue;
    for (int w = 0; w < 4; w++) {
      int nx = t.second.first + dx[w], ny = t.second.second + dy[w];
      if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
      if (vis[nx][ny]) continue;
      if (c[nx][ny] == '#') continue;
      vis[nx][ny] = true;
      int res = min(min(nx, ny), min(n - nx - 1, m - ny - 1));
      if (res % k == 0)
        res = res / k;
      else
        res = res / k + 1;
      minv = min(minv, res + 1);
      q.push(make_pair(t.first + 1, make_pair(nx, ny)));
    }
  }
  printf("%d\n", minv);
  return 0;
}
