#include<stdio.h>
#include<mem.h>
#include<iostream>
using namespace std;
char map[7][7];
bool vis[7][7];
char c[10];
bool flag;
int t,m,n;
int dogx,dogy,sx,sy;
int dxx[]={-1,0,1,0};
int dyy[]={0,1,0,-1};
int abss(int a,int b)
{
if(a>b)return a-b;
else return b-a;
}
void DFS(int dx,int dy,int step)
{
if(flag==true){return;}
if(step==t)
{
if(dx==sx&&dy==sy)
{
flag=true;
}
return;
}
int l=abss(dx,sx)+abss(dy,sy);
if(l+step>t){return;}
if((l+t-step)%2!=0){return;}
for(int i=0;i<=3;i++)
{
int nx=dx+dxx[i];
int ny=dy+dyy[i];
if(nx>=1&&ny>=1&&nx<=m&&ny<=n&&vis[nx][ny]==false&&map[nx][ny]!='X')
{
vis[nx][ny]=true;
DFS(nx,ny,step+1);
vis[nx][ny]=false;
}
}
}
int main()
{
int i,j;
int numx;
while(~scanf("%d%d%d",&m,&n,&t))
{
if(m==0&&n==0&&t==0)
{
break;
}
numx=0;
memset(map,'.',sizeof(map));
memset(vis,false,sizeof(vis));
for(i=1;i<=m;i++)
{
scanf("%s",c);
for(j=1;j<=n;j++)
{
map[i][j]=c[j-1];
if(map[i][j]=='X')
{
numx++;
}
else if(map[i][j]=='S')
{
dogx=i;dogy=j;
}
else if(map[i][j]=='D')
{
sx=i;sy=j;
}
}
}
if(m*n-numx-1<t)
{
printf("NO\n");
continue;
}
flag=false;
vis[dogx][dogy]=true;
DFS(dogx,dogy,0);
if(flag==true)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}