#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define FOR(a,b) for(int i=a;i<=b;i++)
#define FORBACK(a,b) for(int i=b;i>=a;i--)
#define pb push_back
#define mp make_pair
#define sz size
#define fi first
#define se second
typedef pair <int , int> ii;
int r,c,k,ans;
char arr[805][805];
vector<pair<int,int> >v;
bool visited[805][805];
struct State {
	int b, k, byk;
	
	State(){}
	State(int _b, int _k, int z){
		b = _b;
		k = _k;
		byk = z;
	}
};
State s;
queue<State> q;
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};
bool inside(int ro,int co){
	return 1<=ro && ro <=r && 1<=co && co<=c;
}
void bfs(int sr, int sc,int Byk){
	q.push(State(sr,sc,Byk));
	while(!q.empty()){
		State now = q.front();
		q.pop();
		int cb = now.b;
		int ck = now.k;
		int cbyk = now.byk;
		//cout << " :: " << b << " " << k << " " << byk << endl;
		if(cbyk<=ck){
			v.pb(mp(cb,ck));
		}
		for(int i=0;i<4;i++){
			if(inside(cb + dx[i],ck + dy[i]) && arr[cb + dx[i]][ck + dy[i]]!='#' && visited[cb + dx[i]][ck + dy[i]]==false){
				visited[cb + dx[i]][ck + dy[i]]=true;
				q.push(State(cb + dx[i], ck + dy[i], cbyk + 1));							
			}			
		}
	}
}

int min3(int a , int b , int c) {
	return min(min(a , b) , c);
}

int min4(int a , int b , int c , int d) {
	return min(min3(a , b , c) , d);
}

int updiv(int a , int b) {
	int tmp = a / b;
	return tmp * b < a ? tmp + 1 : tmp;
}

int main(){
//	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	cin>>r>>c>>k;
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			cin>>arr[i][j];
		}
	}
	for(int i=1;i<=r;i++){
		for(int j=1;j<=c;j++){
			if(arr[i][j]=='S'){
				bfs(i,j,0);
				break;
			}
		}
	}
	int sol = INT_MAX;
		int _r = vec.fi, _c = vec.se;
		sol = min(sol , min4(_c - 1 , c - _c , _r - 1 , r - _r));
	}
	printf("%d\n" , updiv(sol , k) + 1);
}
