#include<stdio.h>
#include<math.h>
#include<stdlib.h>
char s[104][104];
int n,m,k;
int sx,sy;
int di,dj,wall=0;
struct tv
{
int x;
int y;
int number;
} T[10010];
int bfs(int num,int sx,int sy)
{
tv a,a1;
int xx,yy,g=0,h=0;
char div[4][2]= {1,0,0,-1,-1,0,0,1};//四个方向;
a.x=sx;
a.y=sy;
a.number=0;
T[g]=a;
g++;
if((num==k)&&(sx==di)&&(sy==dj))
return 1;
if(num>=k)
return 0;
if(k-num-abs(di-sx)-abs(dj-sy)<0)
return 0;
if((k-num-abs(di-sx)-abs(dj-sy))%2!=0)
return 0;
for(int i=0; i<4; i++)
{
xx=sx+div[i][0];//向左右移动
yy=sy+div[i][1];//相上下移动
if(xx>=0&&xx<n&&yy>=0&&yy<m&&s[xx][yy]!='X')
{
s[xx][yy]='X';
if(bfs(num+1,xx,yy))
return 1;
s[xx][yy]='.';
}
}
return 0;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
if(m==0&&n==0&&k==0)
break;
for(int i=0; i<n; i++)
{
scanf("%s",s[i]);
for(int j=0; j<m; j++)
{
if(s[i][j]=='S')
{
sx=i;
sy=j;
s[i][j]='X';
}
else if (s[i][j]=='D')
{
di=i,dj=j;
}
}
getchar();
}
int t=bfs(0,sx,sy);
if(t==0)
printf("NO\n");
else
printf("YES\n");
}
}