#include <iostream>
#include <fstream>
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <iomanip>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <sstream>
#include <string>
#include <vector>
using namespace std;

#pragma comment(linker, "/STACK:400000000")

#define EPS 1e-9
#define INF MOD
#define MOD 1000000007LL
#define fir first
#define foreach(it,X) for(it=X.begin();it!=X.end();it++)
#define iss istringstream
#define ite iterator
#define ll long long
#define mp make_pair
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<n;i++)
#define pi pair<int,int>
#define pb push_back
#define sec second
#define sst stringstream
#define sz size()
#define vc vector
typedef vc<int> vi;
typedef vc<ll> vl;
typedef vc<string> vs;

int H,W,N;
char s[1000010],c[1010][1010];
int sy,sx,gy,gx;
int dir[1000010],cost[1000010][4],dist[1010][1010];
int dy[]={0,1,0,-1};
int dx[]={1,0,-1,0};

typedef pair<int,pi> T;

int main(){
	while(cin>>H>>W>>N && H){
		rep(i,N)cin>>s[i];
		rep(i,H+2)rep(j,W+2)c[i][j]='#';
		rep2(i,1,H+1)rep2(j,1,W+1){
			cin>>c[i][j];
			if(c[i][j]=='S')sy=i,sx=j,c[i][j]='.';
			if(c[i][j]=='G')gy=i,gx=j,c[i][j]='.';
		}
		
		dir[0]=3;
		rep(i,N){
			if(s[i]=='L')dir[i+1]=(dir[i]+3)%4;
			else dir[i+1]=(dir[i]+1)%4;
		}
		for(int i=N;i>=0;i--){
			rep(j,4){
				if(j==dir[i])cost[i][j]=0;
				else{
					if(i==N)cost[i][j]=INF;
					else cost[i][j]=cost[i+1][j]+1;
				}
			}
		}
		
		rep(i,H+2)rep(j,W+2)dist[i][j]=INF;
		dist[sy][sx]=0;
		priority_queue<T,vector<T>,greater<T> > Q;
		Q.push(T(0,pi(sy,sx)));
		while(Q.sz){
			T is=Q.top();
			Q.pop();
			int dis=is.fir;
			pi st=is.sec;
			if(dist[st.fir][st.sec] < dis)continue;
			if(st.fir==gy && st.sec==gx){
				cout<<"Yes"<<endl;
				goto end;
			}
			
			rep(i,4){
				int ny=st.fir+dy[i],nx=st.sec+dx[i];
				if(c[ny][nx]=='#')continue;
				if(dis + cost[dis][i] < dist[ny][nx]){
					dist[ny][nx] = dis + cost[dis][i];
					Q.push(T(dist[ny][nx],pi(ny,nx)));
				}
			}
		}
		cout<<"No"<<endl;
		end:;
	}
}