#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
void DFS(int si, int sj, int count);
int N, M, T;
char map[7][7];
int si(0), sj(0); //S's coordinate
int di(0), dj(0); //D's coordinate
bool survive(false);
int main() {
while ( scanf("%d%d%d", &N, &M, &T), N&&M&&T ) {
//getchar();
survive = false;
//input
int wall(0);
int i, j;
for ( i = 0; i < N; ++i){
scanf("%s", map[i]);
for( j = 0; j < M; ++j ) {
if ('S' == map[i][j]) { si = i; sj = j; }
else if('D' == map[i][j]) { di = i; dj = j; }
else if('X' == map[i][j]) ++wall;
}
}
if ( N*M - wall <= T ) {
printf("NO\n");
continue;
}
map[si][sj] = 'X';
DFS(si, sj, 0);
if( survive ) printf("YES\n");
else printf("NO\n");
}
}
void DFS(int si, int sj, int count) {
int move[4][2] = { {0, -1}, {0, 1}, {-1,0}, {1, 0} };
if (si >= N || sj >= M || si < 0 || sj < 0) return ;
if (si == di && sj == dj && count == T) {survive = true; return ;}
int temp = (T - count) - abs(si - di) - abs(sj - dj);
if (temp < 0 || temp%2) return ;
int i(0);
for ( i = 0; i < 4; ++i ) {
int mi = si + move[i][0];
int mj = sj + move[i][1];
if (map[mi][mj] != 'X') {
map[mi][mj] = 'X';
DFS(mi, mj, count + 1);
if (survive) return ;
map[mi][mj] = '.';
}
}
return ; //all is wall
}