//这个题目还是很经典的
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
char a[100][100];
int v[100][100];
int m,n;
int p,q,k,time;
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void DFS(int x,int y,int u)
{
int i=0;
if(u>time)
return ;
if(x==p&&y==q&&u==time)
{
k=1;
return;
}
if(time<u+abs(x-p)+abs(y-q)||(time-(u+abs(x-p)+abs(y-q)))%2)//关键在这里的剪枝,为嘛这里还要%2,可以在纸上画一画就知道,他不管怎样绕都一定增加的是2的倍数
return ;
for(i=0;i<4;i++)
{
if(a[x+d[i][0]][y+d[i][1]]!='X'&&v[x+d[i][0]][y+d[i][1]]==0&&x+d[i][0]>=0&&x+d[i][0]<n&&y+d[i][1]>=0&&y+d[i][1]<m)
{
v[x+d[i][0]][y+d[i][1]]=1;
DFS(x+d[i][0],y+d[i][1],u+1);
if(k==1)
return;
v[x+d[i][0]][y+d[i][1]]=0;
}
}
return ;
}
int main()
{
int i,j,x,y;
// freopen("in.txt","r",stdin);
while(scanf("%d%d%d",&n,&m,&time)!=EOF)
{
if(n==0||m==0||time==0)
break;
memset(v,0,sizeof(v));
for(i=0;i<n;i++)
{
scanf("%s",&a[i]);
getchar();
for(j=0;j<m;j++)
{
if(a[i][j]=='S')
{
x=i;
y=j;
}
if(a[i][j]=='D')
{
p=i;
q=j;
// printf("%d %d\n",p,q);
}
}
}
k=-1;
int u=0;
v[x][y]=1;
DFS(x,y,u);
if(k==-1)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}