#include <bits/stdc++.h>
using namespace std;

struct state {
    int y, x, dir;
    state(int y, int x, int dir) : y(y), x(x), dir(dir) {}
};

int main() {
    // south, east, north, west 
    constexpr int dx[4] = {0, 1, 0, -1};
    constexpr int dy[4] = {1, 0, -1, 0};
    constexpr int inf = 1e9;

    int H, W, N;
    while(cin >> H >> W >> N, H) {
        string s;
        cin >> s;
        vector<string> fld(H);
        int sy, sx, gy, gx;
        for(int i = 0; i < H; ++i) {
            cin >> fld[i];
            for(int j = 0; j < W; ++j) {
                if(fld[i][j] == 'S') {
                    sy = i;
                    sx = j;
                }
                if(fld[i][j] == 'G') {
                    gy = i;
                    gx = j;
                }
            }
        }

        vector<vector<int>> next_idx(N + 1, vector<int>(4, inf));
        {
            int cur_dir = 2;
            for(int i = 0; i < N; ++i) {
                (cur_dir += (s[i] == 'L' ? 1 : 3)) %= 4;
            }
            for(int i = N - 1; i >= 0; --i) {
                next_idx[i] = next_idx[i + 1];
                next_idx[i][cur_dir] = i;
                (cur_dir += s[i] == 'L' ? 3 : 1) %= 4;
            }
        }

        vector<vector<vector<int>>> dist(H, vector<vector<int>>(W, vector<int>(4, inf)));
        queue<state> que;
        que.emplace(sy, sx, 2);
        dist[sy][sx][2] = 0;
        while(!que.empty()) {
            auto now = que.front();
            que.pop();

            // turn
            const int now_op_idx = dist[now.y][now.x][now.dir];
            for(int ndir = 0; ndir < 4; ++ndir) {
                const int next_op_idx = next_idx[now_op_idx][ndir] + 1;
                if(dist[now.y][now.x][ndir] > next_op_idx) {
                    dist[now.y][now.x][ndir] = next_op_idx;
                    que.emplace(now.y, now.x, ndir);
                }
            }

            // forward
            const int ny = now.y + dy[now.dir];
            const int nx = now.x + dx[now.dir];
            if(ny < 0 || H <= ny || nx < 0 || W <= nx) continue;
            if(fld[ny][nx] == '#') continue;
            if(dist[ny][nx][now.dir] > dist[now.y][now.x][now.dir]) {
                dist[ny][nx][now.dir] = dist[now.y][now.x][now.dir];
                que.emplace(ny, nx, now.dir);
            }
        }

        if(*min_element(begin(dist[gy][gx]), end(dist[gy][gx])) != inf) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
}

