#include <bits/stdc++.h>
using namespace std;
const double PI = 2 * acos(0.0);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rng_64(chrono::steady_clock::now().time_since_epoch().count());
const string DIGITS = "0123456789";
const string ALPH = "abcdefghijklmnopqrstuvwxyz";
template <class T0, class T1>
inline ostream &operator<<(ostream &out, pair<T0, T1> &a) {
  return out << "{" << a.first << ", " << a.second << "}";
}
template <class T0, class T1>
inline istream &operator>>(istream &in, pair<T0, T1> &a) {
  return in >> a.first >> a.second;
}
template <class T0, class T1, class T2>
inline ostream &operator<<(ostream &out, tuple<T0, T1, T2> &a) {
  return out << "{" << get<0>(a) << ", " << get<1>(a) << ", " << get<2>(a)
             << "}";
}
template <class T0, class T1, class T2, class T3>
inline ostream &operator<<(ostream &out, tuple<T0, T1, T2, T3> &a) {
  return out << "{" << get<0>(a) << ", " << get<1>(a) << ", " << get<2>(a)
             << ", " << get<3>(a) << "}";
}
template <class T>
inline ostream &operator<<(ostream &out, vector<T> &a) {
  out << "[";
  for (int i = 0; i < int(a.size()); ++i)
    out << a[i] << vector<string>{", ", "]  "}[i + 1 == a.size()];
  return out;
}
void smain();
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(12) << fixed;
  smain();
  return 0;
}
const int N = 800 * 800 + 100;
int n, m;
vector<string> s;
vector<int> dx = {0, 0, 1, -1}, dy = {1, -1, 0, 0};
bool correct(int i, int j) { return (i >= 0 && i < n && j >= 0 && j < m); }
int qi[N], qj[N];
void smain() {
  int k;
  cin >> n >> m >> k;
  s.resize(n);
  int sti, stj;
  for (int i = 0; i < n; i++) {
    cin >> s[i];
    for (int j = 0; j < m; j++) {
      if (s[i][j] == 'S') {
        sti = i;
        stj = j;
      }
    }
  }
  int st = 0, fn = 0;
  qi[fn] = sti;
  qj[fn] = stj;
  fn++;
  vector<vector<int> > used(n, vector<int>(m)), b(n, vector<int>(m)),
      c(n, vector<int>(m));
  used[sti][stj] = 1;
  while (st != fn) {
    int x = qi[st], y = qj[st];
    st++;
    for (int i = 0; i < 4; i++) {
      int nx = x + dx[i], ny = y + dy[i];
      if (correct(nx, ny) && !used[nx][ny]) {
        used[nx][ny] = 1;
        b[nx][ny] = b[x][y] + 1;
        c[nx][ny] = c[x][y] + (s[nx][ny] == '#');
        qi[fn] = nx;
        qj[fn] = ny;
        fn++;
      }
    }
  }
  int ans = 800 * 800;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      if (i == 0 || j == 0 || i == n - 1 || j == m - 1)
        ans = min(ans, (max(b[i][j], c[i][j])));
    }
  }
  cout << ans / k + (ans % k != 0);
}
