#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using db = double;
using ld = long double;
template <typename T>
using V = vector<T>;
template <typename T>
using VV = vector<vector<T>>;
const ll mod = 1000000007;
const ll INF = 1000000099;
const ll LINF = (ll)(1e18 + 99);
const vector<ll> dx = {-1, 1, 0, 0}, dy = {0, 0, -1, 1};
template <typename T, typename U>
inline bool chmin(T &t, const U &u) {
  if (t > u) {
    t = u;
    return 1;
  }
  return 0;
}
template <typename T, typename U>
inline bool chmax(T &t, const U &u) {
  if (t < u) {
    t = u;
    return 1;
  }
  return 0;
}
template <typename T>
inline T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <typename T>
inline T mpow(T a, T n) {
  T res = 1;
  for (; n; n >>= 1) {
    if (n & 1) res = res * a;
    a = a * a;
  }
  return res;
}
signed main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  cout << fixed << setprecision(20);
  int h, w, k;
  cin >> h >> w >> k;
  V<string> v(h);
  VV<bool> used(h, V<bool>(w, false));
  queue<ll> mov, bre;
  for (ll i = 0; i < (ll)(h); ++i) {
    cin >> v[i];
    for (ll j = 0; j < (ll)(w); ++j) {
      if (v[i][j] == 'S') {
        mov.push(i);
        mov.push(j);
        mov.push(k);
        used[i][j] = true;
      }
    }
  }
  ll ans = 1;
  bool flag = false;
  while (1) {
    while (mov.size()) {
      int g, r, num;
      g = mov.front();
      mov.pop();
      r = mov.front();
      mov.pop();
      num = mov.front();
      mov.pop();
      bre.push(g);
      bre.push(r);
      bre.push(k);
      if (num == 0) continue;
      for (ll i = 0; i < (ll)(4); ++i) {
        int neg = g + dx[i], ner = r + dy[i];
        if (0 <= neg && neg < h && 0 <= ner && ner < w &&
            (v[neg][ner] == '.' || flag) && !used[neg][ner]) {
          if (!neg || !ner || neg == h - 1 || ner == w - 1) {
            cout << ans << '\n';
            return 0;
          }
          used[neg][ner] = true;
          mov.push(neg);
          mov.push(ner);
          mov.push(num - 1);
        }
      }
    }
    ans++;
    flag = true;
    while (bre.size()) {
      int g, r, num;
      g = bre.front();
      bre.pop();
      r = bre.front();
      bre.pop();
      num = bre.front();
      bre.pop();
      if (num == 0) continue;
      for (ll i = 0; i < (ll)(4); ++i) {
        int neg = g + dx[i], ner = r + dy[i];
        if (0 <= neg && neg < h && 0 <= ner && ner < w && !used[neg][ner]) {
          if (!neg || !ner || neg == h - 1 || ner == w - 1) {
            cout << ans << '\n';
            return 0;
          }
          used[neg][ner] = true;
          bre.push(neg);
          bre.push(ner);
          bre.push(num - 1);
        }
      }
    }
  }
}
