//我刚开始竟然用bfs做,不断的wa,bfs是用来求最短路的而这道题是求固定时间的
//剪纸奇偶剪枝加dfs
#include<stdio.h>
#include<queue>
#include<math.h>
#include<string.h>
using namespace std;
#define N 10
char ma[N][N];
struct node {
int x,y,step;
}ss,tt;
int dis[4][2]={1,0,-1,0,0,1,0,-1},n,m,t;
int vis[N][N];
int judge(int x,int y) {
if(ma[x][y]!='X'&&x>=1&&x<=n&&y>=1&&y<=m&&!vis[x][y])//刚开始这里少些!vis[x][y]导致wa
return 1;
return 0;
}
int dfs(int x,int y,int step) {
int xx,yy,st,i;
if(ma[x][y]=='D'&&step==t)return 1;
if(step>=t) return 0;
for(i=0;i<4;i++) {
xx=x+dis[i][0];
yy=y+dis[i][1];
st=step+1;
if(judge(xx,yy)) {
vis[xx][yy]=1;
if(dfs(xx,yy,st))return 1;
vis[xx][yy]=0;
}
}
return 0;
}
int main() {
int i,j,k;
while(scanf("%d%d%d",&n,&m,&t),n||m||t) {
for(i=1;i<=n;i++)
scanf("%s",ma[i]+1);
k=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) {
if(ma[i][j]=='S') {
ss.x=i;
ss.y=j;
}
if(ma[i][j]=='D') {
tt.x=i;
tt.y=j;
}
if(ma[i][j]=='X')
k++;
}
if(n*m-k<t||(((int)fabs(tt.x-ss.x)+(int)fabs(tt.y-ss.y))%2!=t%2)) {
printf("NO\n");
continue;
}
memset(vis,0,sizeof(vis));
vis[ss.x][ss.y]=1;
if(dfs(ss.x,ss.y,0))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}