#include<stdio.h> #include<math.h> int time,atx,aty,n,m; char map[26][26]; bool flag; void dfs(int x,int y,int t) { if(x<0||x>=n||y<0||y>=m) return; if(flag==true||(t==0&&x==atx&&aty==y)) { flag=true; return; } int temp=t-abs(x-atx)-abs(y-aty); if(temp<0 || temp&1) return; map[x][y]='X'; if(map[x+1][y]!='X') { dfs(x+1,y,t-1); if(flag) return; } if(map[x][y+1]!='X') { dfs(x,y+1,t-1); if(flag) return; } if(map[x-1][y]!='X') { dfs(x-1,y,t-1); if(flag) return; } if(map[x][y-1]!='X') { dfs(x,y-1,t-1); if(flag) return; } map[x][y]='.'; } int main() { int i,j,x,y,wall; while(scanf("%d%d%d",&n,&m,&time)&&(n!=0||m!=0||time!=0)) { flag=false; wall=0; for(i=0;i<n;++i) { scanf("%s",map[i]); for(j=0;j<m;++j) { if(map[i][j]=='S') { x=i; y=j; } if(map[i][j]=='D') { atx=i; aty=j; } if(map[i][j]=='X') wall++; } } dfs(x,y,time); if(n*m-wall<=time) { printf("NO\n"); continue; } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }