#include<stdio.h>
#include<stdlib.h>
#include <algorithm>
#include <math.h>
using namespace std;
char dp[100][100];
int start_x,start_y;
int end_x,end_y;
int time;
int n,m;
int first=0;
int num[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
//(abs(end_x-x)+abs(end_y-y)当前位置到终点的最短距离
//如果最短路径为x;那么到达目的地所走的长度的奇偶性一定和x一样
//注意开始的位置,只能待一次,以后都不能在待在那里了
void work(int x,int y,int second)
{
if((abs(end_x-x)+abs(end_y-y))>time-second)
return;
if((abs(end_x-x)+abs(end_y-y))%2!=(time-second)%2)
return;
if(first)
return;
if(x==end_x&&y==end_y&&second==time)
{
first=1;
return ;
}
if(second>time) return;
if(x==end_x&&y==end_y&&second<time-1)
{
return ;
}
for(int i=0; i<4; i++)
{
int x1=x+num[i][0];
int y1=y+num[i][1];
if(x1>0&&x1<=n&&y1>0&&y1<=m&&dp[x1][y1]!='X')
{
dp[x1][y1]='X';
work(x1,y1,second+1);
dp[x1][y1]='.';
}
}
return ;
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&time)&&(n||m||time))
{
getchar();
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
scanf("%c",&dp[i][j]);
if(dp[i][j]=='S')
{
start_x=i;
start_y=j;
dp[i][j]='X';////注意开始的位置,只能待一次,以后都不能在待在那里了
}
if(dp[i][j]=='D')
{
end_x=i;
end_y=j;
dp[i][j]='.';
}
}
getchar();
}
first=0;
work(start_x,start_y,0);
if(first)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}