#include using namespace std; int main() { int R,C; while(cin >> R >> C) { vector V(R); for(int i =0; i < R; i++) cin >> V[i]; int L; cin >> L; string S; cin >> S; vector< vector > G(R*C*L*4); int dx[] ={-1,0,1,0}; int dy[] ={0,1,0,-1}; for(int i =0; i < R; i++) for(int j =0; j < C; j++) for(int k =0; k < 4; k++) if(V[i][j] != 'X') for(int l =0; l < L; l++) { int x =i+dx[k], y =j+dy[k], d =k; if(S[l] != 'S') { x =i, y =j; if(S[l] == 'L') d =(d+3)%4; else d =(d+1)%4;} if(x < 0 || y < 0 || x >= R || y >= C || V[x][y] == 'X') x =i, y =j; G[d+4*(x+R*(y+C*((l+1)%L)))].push_back(k+4*(i+R*(j+C*l)));} vector vis(R*C*L*4,0); queue q; for(int i =0; i < R; i++) for(int j =0; j < C; j++) if(V[i][j] == 'E') for(int k =0; k < 4; k++) for(int l =0; l < L; l++) { q.push(k+4*(i+R*(j+C*l))); vis[k+4*(i+R*(j+C*l))] =true;} while(!q.empty()) { for(int i =0; i < G[q.front()].size(); i++) if(!vis[G[q.front()][i]]) { vis[G[q.front()][i]] =true; q.push(G[q.front()][i]);} q.pop();} int ans =0, a =0; for(int i =0; i < R; i++) for(int j =0; j < C; j++) if(V[i][j] != 'X') { a++; if(vis[4*(i+R*j)]) ans++;} if(a == ans) cout << "OK\n"; else cout << ans << "\n";} }