#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void debug_out() { std::cout << std::endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cout << H << " ";
  debug_out(T...);
}
template <typename T>
std::ostream& operator<<(std::ostream& os, std::vector<T> vec) {
  for (std::size_t i = 0; i < vec.size(); i++)
    os << vec[i] << (i + 1 == vec.size() ? "" : " ");
  return os;
}
struct Edge {
  int to;
  ll weight;
  Edge(int t, ll w) : to(t), weight(w) {}
};
struct edge {
  int from;
  int to;
  ll weight;
  edge(int f, int t, ll w) : from(f), to(t), weight(w) {}
};
using Graph = vector<vector<Edge>>;
using graph = vector<vector<int>>;
using edges = vector<edge>;
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T>
T lcm(T a, T b) {
  return (a * b) / gcd(a, b);
}
constexpr ll LNF = 1LL << 60;
constexpr int INF = 1e9 + 7;
const double PI = 3.14159265358979323846;
vector<int> dx = {-1, 0, 1, 0, -1, 1, -1, 1};
vector<int> dy = {0, -1, 0, 1, 1, -1, -1, 1};
constexpr ll mod = 1000000007;
struct mint {
  ll x;
  mint(ll x = 0) : x((x % mod + mod) % mod) {}
  mint operator-() const { return mint(-x); }
  mint& operator+=(const mint a) {
    if ((x += a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator-=(const mint a) {
    if ((x += mod - a.x) >= mod) x -= mod;
    return *this;
  }
  mint& operator*=(const mint a) {
    (x *= a.x) %= mod;
    return *this;
  }
  mint operator+(const mint a) const { return mint(*this) += a; }
  mint operator-(const mint a) const { return mint(*this) -= a; }
  mint operator*(const mint a) const { return mint(*this) *= a; }
  mint pow(ll t) const {
    if (!t) return 1;
    mint a = pow(t >> 1);
    a *= a;
    if (t & 1) a *= *this;
    return a;
  }
  mint inv() const { return pow(mod - 2); }
  mint& operator/=(const mint a) { return *this *= a.inv(); }
  mint operator/(const mint a) const { return mint(*this) /= a; }
};
istream& operator>>(istream& is, const mint& a) { return is >> a.x; }
ostream& operator<<(ostream& os, const mint& a) { return os << a.x; }
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  int h, w, k;
  cin >> h >> w >> k;
  vector<string> a(h);
  pair<int, int> s;
  for (int i = (int)(0); i < (int)(h); i++) {
    cin >> a[i];
    for (int j = (int)(0); j < (int)(w); j++) {
      if (a[i][j] == 'S') {
        s = {i, j};
      }
    }
  }
  queue<pair<int, int>> que;
  que.push(s);
  vector<vector<int>> d(h, vector<int>(w, -1));
  d[s.first][s.second] = 0;
  while (!que.empty()) {
    auto x = que.front();
    que.pop();
    for (int i = (int)(0); i < (int)(4); i++) {
      int ny = x.first + dy[i];
      int nx = x.second + dx[i];
      if (0 <= ny && ny < h && 0 <= nx && nx < w && a[ny][nx] == '.' &&
          d[ny][nx] < 0 && d[x.first][x.second] <= k) {
        d[ny][nx] = d[x.first][x.second] + 1;
        que.push(make_pair(ny, nx));
      }
    }
  }
  int ans = INF;
  for (int i = (int)(0); i < (int)(h); i++) {
    for (int j = (int)(0); j < (int)(w); j++) {
      if (d[i][j] < 0) continue;
      int t = min(abs(i + 1 - h), abs(j + 1 - w));
      chmin(t, i + 1);
      chmin(t, j + 1);
      chmin(ans, (t + k - 1) / k + 1);
    }
  }
  cout << ans << endl;
}
