#include<stdio.h>
#include<math.h>
char maze[8][8];
int time, m, n, wall, sx, sy, dx, dy, escape;
int dir[4][2] = {{0,-1},{0,1},{1,0},{-1,0}};
void dfs(sx, sy, t){
int i, temp;
if(sx > m || sy > n || sx <= 0 || sy <= 0) return ;
if(sx == dx && sy == dy && t == time) escape = 1;
if(escape) return ;
temp = time - t - abs(sx - dx) - abs(sy - dy);
if(temp < 0 || temp & 1) return;
//printf("%d\n", escape);
for(i = 0; i < 4; i++){
if(maze[sx+dir[i][0]][sy+dir[i][1]] != 'X'){
maze[sx+dir[i][0]][sy+dir[i][1]] = 'X';
dfs(sx+dir[i][0], sy+dir[i][1], t + 1);
maze[sx+dir[i][0]][sy+dir[i][1]] = '.';
}
}
}
int main(){
int i, j;
while(1){
wall = 0;
scanf("%d%d%d", &m, &n , &time);
if(0 == m && 0 == m && 0 == time) break;
getchar();
for(i = 1; i <= m; i++){
for(j = 1; j <= n; j++){
scanf("%c", &maze[i][j]);
if('S' == maze[i][j]){
sx = i;
sy = j;
}else if('D' == maze[i][j]){
dx = i;
dy = j;
}else if('X' == maze[i][j]){
wall ++;
}
}//for(j)
getchar();
}//for(i)
escape = 0;
maze[sx][sy] = 'X';
dfs(sx, sy, 0);
if(escape == 1) printf("YES\n");
else printf("NO\n");
}
return 0;
}