#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define M 8
char map[M][M];
int move[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,sx,sy,ex,ey,t,flag,count;
void init()
{
for(int i=0;i<n;i++)
scanf("%s",map[i]);
for(i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if('S'==map[i][j])
{
sx=i; sy=j; map[i][j]='X';
}
else if('.'==map[i][j])
{
count++;
}
else if('D'==map[i][j])
{
ex=i; ey=j;
}
}
}
}
int jud(int row,int col)
{
if(row>=0 && row<n && col>=0 && col<m && map[row][col]!='X') return 1;
return 0;
}
void dfs(int row,int col,int step)
{
if(flag) return ;
if(row==ex && col==ey && step==t)
{
flag=1; return ;
}
if((t-step)%2 != (abs(row-ex)+abs(col-ey))%2) //奇偶减枝法
return ;
if(abs(row-ex)+abs(col-ey) > t-step)
return;
for(int i=0;i<4;i++)
{
int _row=row+move[i][0];
int _col=col+move[i][1];
if(jud(_row,_col))
{
map[_row][_col]='X';
step++;
dfs(_row,_col,step);
step--;
map[_row][_col]='.';
}
}
}
int main()
{
#ifdef __LOCAL
freopen("in.txt","r",stdin);
#endif
while(scanf("%d%d%d",&n,&m,&t) && (n || m ||t))
{
count=flag=0;
init();
if(count+1<t)
{
printf("NO\n"); continue;
}
dfs(sx,sy,0);
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}