// Slower C++ solution:


#include "bits/stdc++.h"

using namespace std;



#define DEBUG(x) cout<<#x<<": "<<x<<endl;

#define DEBUG_VEC(v) cout<<#v<<":";for(int i=0;i<v.size();i++) cout<<" "<<v[i]; cout<<endl



typedef long long ll;

#define vi vector<int>

#define vl vector<ll>

#define vii vector< vector<int> >

#define vll vector< vector<ll> >

#define vs vector<string>

#define pii pair<int,int>

#define pis pair<int,string>

#define psi pair<string,int>

#define pll pair<ll,ll>

const int inf = 1000000001;

const ll INF = 2e18 * 2;

#define MOD 1000000007

#define mod 1000000009

#define pi 3.14159265358979323846

#define Sp(p) cout<<setprecision(15)<< fixed<<p<<endl;

int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };

int dx2[8] = { 1,1,0,-1,-1,-1,0,1 }, dy2[8] = { 0,1,1,1,0,-1,-1,-1 };



#define H 805

#define W 805

vii a(H + 2, vi(W + 2, -1));

int h, w, k;



void bfs(pii start) {

	queue<pii> que;

	que.push(start);

	while (!que.empty()) {

		pii now = que.front();

		que.pop();

		int d = a[now.first][now.second];

		if (d == k) {

			continue;

		}

		for (int i = 0; i < 4; i++) {

			if (a[now.first + dx[i]][now.second + dy[i]] > d + 1) {

				a[now.first + dx[i]][now.second + dy[i]] = d + 1;

				que.push(pii(now.first + dx[i], now.second + dy[i]));

			}

		}

	}

}



int main() {

	int i, j;

	cin >> h >> w >> k;

	int si, sj;

	for (i = 1; i <= h; i++) {

		for (j = 1; j <= w; j++) {

			char c;

			cin >> c;

			if (c == '#') {

				a[i][j] = -1;

			}

			else if (c == '.') {

				a[i][j] = inf;

			}

			else {

				a[i][j] = 0;

				si = i;

				sj = j;

			}

		}

	}

	bfs(pii(si, sj));

	int m = inf;

	for (i = 1; i <= h; i++) {

		for (j = 1; j <= w; j++) {

			if (a[i][j] >= 0 && a[i][j] <= k) {

				m = min(m, min(min(i - 1, h - i), min(j - 1, w - j)));

			}

		}

	}

	cout << 1 + (m + k - 1) / k << endl;

}

// Faster C++ solution for the same problem (measured speedup: 3.646756998467212x):
#include <bits/stdc++.h>

 

using namespace std;

 

#define DEBUG(x) cerr<<#x<<": "<<x<<endl;

#define DEBUG_VEC(v) cerr<<#v<<":";for(int i=0;i<v.size();i++) cerr<<" "<<v[i]; cerr<<endl;

#define DEBUG_MAT(v) cerr<<#v<<endl;for(int i=0;i<v.size();i++){for(int j=0;j<v[i].size();j++) {cerr<<v[i][j]<<" ";}cerr<<endl;}

typedef long long ll;

// #define int ll

 

#define vi vector<int>

#define vl vector<ll>

#define vii vector< vector<int> >

#define vll vector< vector<ll> >

#define vs vector<string>

#define pii pair<int,int>

#define pis pair<int,string>

#define psi pair<string,int>

#define pll pair<ll,ll>

template<class S, class T> pair<S, T> operator+(const pair<S, T> &s, const pair<S, T> &t) { return pair<S, T>(s.first + t.first, s.second + t.second); }

template<class S, class T> pair<S, T> operator-(const pair<S, T> &s, const pair<S, T> &t) { return pair<S, T>(s.first - t.first, s.second - t.second); }

template<class S, class T> ostream& operator<<(ostream& os, pair<S, T> p) { os << "(" << p.first << ", " << p.second << ")"; return os; }

#define X first

#define Y second

#define rep(i,n) for(int i=0;i<(int)(n);i++)

#define rep1(i,n) for(int i=1;i<=(int)(n);i++)

#define rrep(i,n) for(int i=(int)(n)-1;i>=0;i--)

#define rrep1(i,n) for(int i=(int)(n);i>0;i--)

#define REP(i,a,b) for(int i=a;i<b;i++)

#define in(x, a, b) (a <= x && x < b)

#define all(c) c.begin(),c.end()

template<class T> bool chmax(T &a, const T &b) { if (a<b) { a = b; return 1; } return 0; }

template<class T> bool chmin(T &a, const T &b) { if (a>b) { a = b; return 1; } return 0; }

#define UNIQUE(v) v.erase(std::unique(v.begin(), v.end()), v.end());

const ll inf = 1000000001;

const ll INF = (ll)1e18 + 1;

const long double pi = 3.1415926535897932384626433832795028841971L;

#define Sp(p) cout<<setprecision(25)<< fixed<<p<<endl;

// int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};

// int dx2[8] = { 1,1,0,-1,-1,-1,0,1 }, dy2[8] = { 0,1,1,1,0,-1,-1,-1 };

vi dx = {1, 0, -1, 0}, dy = {0, 1, 0, -1};

// vi dx2 = { 1,1,0,-1,-1,-1,0,1 }, dy2 = { 0,1,1,1,0,-1,-1,-1 };

#define fio() cin.tie(0); ios::sync_with_stdio(false);

const ll MOD = 1000000007;

// const ll MOD = 998244353;

// #define mp make_pair

//#define endl '\n'





signed main() {

    fio();

    

    int h, w, k;

    cin >> h >> w >> k;

    vector<string> s(h);

    pii start;

    rep (i, h) {

        cin >> s[i];

        rep (j, w) {

            if (s[i][j] == 'S') start = pii(i, j);

        }

    }



    queue<pii> qu;

    qu.push(start);

    vii dist(h, vi(w, inf));

    dist[start.first][start.second] = 0;



    while (qu.size()) {

        pii temp = qu.front();

        qu.pop();



        int i = temp.first, j = temp.second;

        int cost = dist[i][j];

        if (cost == k) continue;

        if (i == 0 or i == h - 1 or j == 0 or j == w - 1) continue;



        rep (l, 4) {

            int ni = i + dy[l], nj = j + dx[l];

            if (s[ni][nj] == '#') continue;

            if (dist[ni][nj] > cost + 1) {

                dist[ni][nj] = cost + 1;

                qu.push(pii(ni, nj));

            }

        }

    }



    // DEBUG_MAT(dist);

    rep (i, h) {

        rep (j, w) {

            if (i != 0 and i != h - 1 and j != 0 and j != w - 1) continue;

            if (dist[i][j] != inf) {

                cout << 1 << endl;

                return 0;

            }

        }

    }



    int ans = inf;

    rep (i, h) {

        rep (j, w) {

            if (dist[i][j] == inf) continue;

            int mi = min({

                i, h - 1 - i, j, w - 1 - j

            });

            if (mi % k == 0) chmin(ans, 1 + mi / k);

            else chmin(ans, 1 + mi / k + 1);

        }

    }

    cout << ans << endl;

}