// zoj 2110 #include<stdio.h> #include<math.h> char map[9][9]; int m,n,t; int di,dj; bool escape; int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}}; void dfs(int si,int sj,int cnt) { int i,temp; if(si>n||sj>m||si<=0||sj<=0) return ; if(si==di&&sj==dj&&cnt==t) { escape=1; return ; } temp=t-cnt-fabs(si-di)-fabs(sj-dj); if(temp<0 || temp%2) return ; for(i=0;i<4;i++) { if(map[si+dir[i][0]][sj+dir[i][1]]!='X') { map[si+dir[i][0]][sj+dir[i][1]]='X'; dfs(si+dir[i][0],sj+dir[i][1],cnt+1); if(escape) return ; map[si+dir[i][0]][sj+dir[i][1]]='.'; } } return ; } int main() { int i,j,si,sj; // freopen("input.txt","r",stdin); while(scanf("%d%d%d",&n,&m,&t)) { if(n==0 && m==0 && t==0) break; int wall=0; char temp; scanf("%c",&temp); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%c",&map[i][j]); if(map[i][j]=='S') { si=i; sj=j; } else if(map[i][j]=='D') { di=i; dj=j; } else if(map[i][j]=='X') wall++; } scanf("%c",&temp); } if(n*m-wall<=t) { printf("NO\n"); continue; } escape=0; map[si][sj]='X'; dfs(si,sj,0); if(escape) printf("YES\n"); else printf("NO\n"); } return 0; }