#include <stdio.h> #include <string.h> int dx[4]={1,-1,0, 0}; int dy[4]={0, 0,1,-1}; int ii=0,n,m,t,flag; int map[10][10]; char c[10][10]; int abs(int); void dfs(int,int); int main(int argc, char *argv[]) { int i,j,x,y,x1,y1; /* freopen("input.in","r",stdin); freopen("output.out","w",stdout); */ while(scanf("%d%d%d",&n,&m,&t)!=EOF) { if(n==0&&m==0&&t==0)break; flag=0; memset(map,0,sizeof(map)); getchar(); for(i=0;i<n;i++) { for(j=0;j<m;j++) { c[i][j]=getchar(); if(c[i][j]=='S') { y=i; x=j; map[i][j]=1; } if(c[i][j]=='D') { y1=i; x1=j; } } getchar(); } if(n*m-t<0) { printf("no\n"); break; } if((abs(x-x1)+abs(y-y1))%2!=(t%2)) { printf("NO\n"); continue; } dfs(y,x); if(flag==1)printf("YES\n"); else printf("NO\n"); } return 0; } void dfs(int y,int x) { int p; int q; if(c[y][x]=='D'&&ii==t){ flag=1; return; } if(c[y][x]!='D'&&ii==t) return; for(p=0;p<4;p++) { q=0; y+=dy[p];x+=dx[p]; if(flag==0&&x>=0&&x<m&&y>=0&&y<n&&map[y][x]!=1&&c[y][x]!='X') { q=1; ii++; map[y][x]=1; if(ii<=t) dfs(y,x); } if(q==1) { ii--; map[y][x]=0; } y-=dy[p];x-=dx[p]; } return; } int abs(int x) { if(x<0)return (-x); else return x; }