#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define pi 3.141592653589793238
#define int long long
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

char a[805][805];
int dis[805][805];
int n,m,k;
vector<pair<int,int> >temp;

void bfs(int x,int y)
{
	queue<pair<int,int> >qq;
	qq.push({x,y});
	while (!qq.empty())
	{
		pair<int,int>pp=qq.front();
		qq.pop();
		if(pp.first>1)
		{
			if(a[pp.first-1][pp.second]=='.')
			{
				if(dis[pp.first-1][pp.second]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first-1][pp.second]=dis[pp.first][pp.second]+1;
					qq.push({pp.first-1,pp.second});
				}
			}
		}
		if(pp.second>1)
		{
			if(a[pp.first][pp.second-1]=='.')
			{
				if(dis[pp.first][pp.second-1]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first][pp.second-1]=dis[pp.first][pp.second]+1;
					qq.push({pp.first,pp.second-1});
				}
			}
		}
		if(pp.first<n)
		{
			if(a[pp.first+1][pp.second]=='.')
			{
				if(dis[pp.first+1][pp.second]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first+1][pp.second]=dis[pp.first][pp.second]+1;
					qq.push({pp.first+1,pp.second});
				}
			}
		}
		if(pp.second<m)
		{
			if(a[pp.first][pp.second+1]=='.')
			{
				if(dis[pp.first][pp.second+1]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first][pp.second+1]=dis[pp.first][pp.second]+1;
					qq.push({pp.first,pp.second+1});
				}
			}
		}
	}
}

void bfs2()
{
	queue<pair<int,int> >qq;
	for(auto i:temp)
		qq.push(i);
	while (!qq.empty())
	{
		pair<int,int>pp=qq.front();
		qq.pop();
		if(pp.first>1)
		{
				if(dis[pp.first-1][pp.second]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first-1][pp.second]=dis[pp.first][pp.second]+1;
					qq.push({pp.first-1,pp.second});
				}
		}
		if(pp.second>1)
		{
				if(dis[pp.first][pp.second-1]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first][pp.second-1]=dis[pp.first][pp.second]+1;
					qq.push({pp.first,pp.second-1});
				}
		}
		if(pp.first<n)
		{
				if(dis[pp.first+1][pp.second]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first+1][pp.second]=dis[pp.first][pp.second]+1;
					qq.push({pp.first+1,pp.second});
				}
		}
		if(pp.second<m)
		{
				if(dis[pp.first][pp.second+1]>dis[pp.first][pp.second]+1)
				{
					dis[pp.first][pp.second+1]=dis[pp.first][pp.second]+1;
					qq.push({pp.first,pp.second+1});
				}
		}
	}	
}

signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);  
cout.tie(0);   

#ifndef ONLINE_JUDGE
	if(fopen("INPUT.txt","r"))
	{
	freopen ("INPUT.txt" , "r" , stdin);
	freopen ("OUTPUT.txt" , "w" , stdout);
	}
#endif  

	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	pair<int,int>ind;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			dis[i][j]=1e17;
			if(a[i][j]=='S')
			{
				ind={i,j};
				dis[i][j]=0;
			}
		}
	}	
	bfs(ind.first,ind.second);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(dis[i][j]<=k)
			{
				dis[i][j]=0;
				temp.push_back({i,j});
			}
		}
	}
	bfs2();
	int mn=1e17;
	for(int i=1;i<=n;i++)
	{
		int z=dis[i][1]/k;
		if(dis[i][1]%k)
			z++;
		mn=min(mn,z);			
		
		z=dis[i][m]/k;
		if(dis[i][m]%k)
			z++;
		mn=min(mn,z);			
	}

	for(int i=1;i<=m;i++)
	{
		int z=dis[1][i]/k;
		if(dis[1][i]%k)
			z++;
		mn=min(mn,z);			
		
		z=dis[n][i]/k;
		if(dis[n][i]%k)
			z++;
		mn=min(mn,z);			
	}
	cout<<mn+1;

}


Measured memory_bytes: 28904