#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 200000;
const long long INF = 1001001001;
const long long MOD = 1000000007;
long long H, W, K, ans = INF, tmp = 0, sh, sw;
vector<vector<char>> A;
vector<pair<long long, long long>> vp;
map<pair<long long, long long>, long long> M;
void bfsinit(long long h, long long w, long long ct) {
  queue<pair<pair<long long, long long>, long long>> Q;
  Q.push(make_pair(make_pair(h, w), ct));
  while (!Q.empty()) {
    pair<pair<long long, long long>, long long> p = Q.front();
    Q.pop();
    vp.push_back(p.first);
    if (p.second == 0) continue;
    if (p.first.first - 1 >= 0) {
      if (A[p.first.first - 1][p.first.second] == '.') {
        if (M[make_pair(p.first.first - 1, p.first.second)] > 0) continue;
        M[make_pair(p.first.first - 1, p.first.second)]++;
        Q.push(make_pair(make_pair(p.first.first - 1, p.first.second),
                         p.second - 1));
      }
    }
    if (p.first.first + 1 >= 0) {
      if (A[p.first.first + 1][p.first.second] == '.') {
        if (M[make_pair(p.first.first + 1, p.first.second)] > 0) continue;
        M[make_pair(p.first.first + 1, p.first.second)]++;
        Q.push(make_pair(make_pair(p.first.first + 1, p.first.second),
                         p.second - 1));
      }
    }
    if (p.first.second - 1 >= 0) {
      if (A[p.first.first][p.first.second - 1] == '.') {
        if (M[make_pair(p.first.first, p.first.second - 1)] > 0) continue;
        M[make_pair(p.first.first, p.first.second - 1)]++;
        Q.push(make_pair(make_pair(p.first.first, p.first.second - 1),
                         p.second - 1));
      }
    }
    if (p.first.second + 1 >= 0) {
      if (A[p.first.first][p.first.second + 1] == '.') {
        if (M[make_pair(p.first.first, p.first.second + 1)] > 0) continue;
        M[make_pair(p.first.first, p.first.second + 1)]++;
        Q.push(make_pair(make_pair(p.first.first, p.first.second + 1),
                         p.second - 1));
      }
    }
  }
}
void bfs() {
  queue<pair<pair<long long, long long>, long long>> Q;
  for (long long i = 0; i < vp.size(); i++) {
    Q.push(make_pair(make_pair(vp[i].first, vp[i].second), 2 * K - 1));
  }
  while (!Q.empty()) {
    pair<pair<long long, long long>, long long> p = Q.front();
    Q.pop();
    if (p.first.first == 0 || p.first.first == H - 1 || p.first.second == 0 ||
        p.first.second == W - 1) {
      ans = p.second / K;
      return;
    }
    if (p.first.first - 1 >= 0) {
      if (M[make_pair(p.first.first - 1, p.first.second)] > 0) continue;
      M[make_pair(p.first.first - 1, p.first.second)]++;
      Q.push(make_pair(make_pair(p.first.first - 1, p.first.second),
                       p.second + 1));
    }
    if (p.first.first + 1 >= 0) {
      if (M[make_pair(p.first.first + 1, p.first.second)] > 0) continue;
      M[make_pair(p.first.first + 1, p.first.second)]++;
      Q.push(make_pair(make_pair(p.first.first + 1, p.first.second),
                       p.second + 1));
    }
    if (p.first.second - 1 >= 0) {
      if (M[make_pair(p.first.first, p.first.second - 1)] > 0) continue;
      M[make_pair(p.first.first, p.first.second - 1)]++;
      Q.push(make_pair(make_pair(p.first.first, p.first.second - 1),
                       p.second + 1));
    }
    if (p.first.second + 1 >= 0) {
      if (M[make_pair(p.first.first, p.first.second + 1)] > 0) continue;
      M[make_pair(p.first.first, p.first.second + 1)]++;
      Q.push(make_pair(make_pair(p.first.first, p.first.second + 1),
                       p.second + 1));
    }
  }
}
signed main() {
  cin >> H >> W >> K;
  A.resize(H);
  for (long long i = 0; i < H; i++) {
    for (long long j = 0; j < W; j++) {
      char a;
      cin >> a;
      A[i].push_back(a);
      if (a == 'S') {
        sh = i;
        sw = j;
      }
    }
  }
  bfsinit(sh, sw, K);
  bfs();
  cout << ans << endl;
  return 0;
}
