//搜索练习题,深搜广搜也行
//437MS 240K 1511 B G++
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
char map[10][10];
int mov[4][2]={0,1,1,0,0,-1,-1,0};
int n,m,t;
int flag;
int xb,yb,xe,ye;
void dfs(int x,int y,int k)
{
if(flag) return;
if(x==xe && y==ye && k==t){
flag=1;return;
}
int temp=(t-k)-abs(x-xe)-abs(y-ye);
if(temp<0 || temp&1) return;
for(int i=0;i<4;i++){
int x0=x+mov[i][0];
int y0=y+mov[i][1];
if(x0<n && x0>=0 && y0<m && y0>=0 && map[x0][y0]!='X'){
map[x0][y0]='X';
dfs(x0,y0,k+1);
map[x0][y0]='.';
}
}
return;
}
int main(void)
{
while(scanf("%d%d%d",&n,&m,&t),n+m+t)
{
getchar();
int sum=0;
memset(map,0,sizeof(map));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%c",&map[i][j]);
if(map[i][j]=='S'){
xb=i;yb=j;
}
else if(map[i][j]=='D'){
xe=i;ye=j;
}
else if(map[i][j]=='.')
sum++;
}
getchar();
}
if(sum+1<t){
puts("NO");continue;
}
flag=0;
map[xb][yb]='X';
dfs(xb,yb,0);
if(flag) puts("YES");
else puts("NO");
}
return 0;
}