#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
const int mod = 1000000007;
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
int h, w, k, sx, sy, ans, dist[1000][1000];
string s[1000];
int mi(int a, int b, int c, int d, int e) {
  return min(min(a, b), min(c, min(d, e)));
}
void bfs() {
  queue<pair<int, int> > q;
  q.push(pair<int, int>(sx, sy));
  dist[sx][sy] = 0;
  ans = mi(inf, sx, sy, h - 1 - sx, w - 1 - sy);
  while (!q.empty()) {
    pair<int, int> p = q.front();
    q.pop();
    int x = p.first, y = p.second;
    for (int i = 0; i < (int)(4); i++) {
      int nx = x + dx[i], ny = y + dy[i];
      if (0 <= nx && nx < h && 0 <= ny && ny < w) {
        if (s[nx][ny] == '.' && dist[nx][ny] == inf) {
          dist[nx][ny] = dist[x][y] + 1;
          ans = mi(ans, nx, ny, h - nx - 1, w - ny - 1);
          if (dist[nx][ny] < k) q.push(pair<int, int>(nx, ny));
        }
      }
    }
  }
}
int main() {
  cin >> h >> w >> k;
  for (int i = 0; i < (int)(h); i++) {
    cin >> s[i];
    for (int j = 0; j < (int)(w); j++)
      if (s[i][j] == 'S') {
        sx = i;
        sy = j;
      }
  }
  for (int i = 0; i < (int)(h); i++)
    for (int j = 0; j < (int)(w); j++) dist[i][j] = inf;
  bfs();
  if (ans)
    cout << 2 + (ans - 1) / k * k << endl;
  else
    cout << 1 << endl;
  return 0;
}
