#include using namespace std; typedef long long ll; typedef long double ld; #define REP(i, N) for(int i=0;i<(N);++i) #define FOR(i, a, b) for(int i=(a);i<=(b);++i) #define FORI(i, a, b) for(int i=(a);i<(b);++i) #define FORD(i, a, b) for(int i=(b)-1;i>=(a);--i) char mapa[200][200]; char program[20]; int D[200][200][4][20]; int R,S,L; int rek(int r, int s, int smer, int prog) { if (D[r][s][smer][prog] == 0 || D[r][s][smer][prog] == 1) return D[r][s][smer][prog]; if (mapa[r][s] == 'X') { D[r][s][smer][prog] = 0; return 0; } if (mapa[r][s] == 'E') { D[r][s][smer][prog] = 1; return 1; } D[r][s][smer][prog] = 0; int rn = r,sn = s,smn = smer; int progn = (prog + 1) % L; char inst = program[prog]; if (inst == 'L') { smn = (smer + 3) % 4; } else if (inst == 'R') { smn = (smer + 1) % 4; } else { int rt = rn, st = sn; if (smer == 0) { rt--; } if (smer == 1) { st++; } if (smer == 2) { rt++; } if (smer == 3) { st--; } if (rt < 0 || rt >= R || st < 0 || st >= S || mapa[rt][st] == 'X') { //rn = r; rn = s; } else { rn = rt; sn = st; } } int out = rek(rn,sn,smn,progn); D[r][s][smer][prog] = out; //printf("D %d %d %d %d = %d\n", rn return out; } void solve(){ REP(r,R) { gets(mapa[r]); } scanf("%d ", &L); gets(program); REP(r,R) REP(s,S) REP(smer,4) REP(l,L) D[r][s][smer][l] = -1; REP(r,R) REP(s,S) REP(smer,4) REP(l,L) rek(r,s,smer,l); int free = 0, goodfree = 0; REP(r,R) REP(s,S) { if (mapa[r][s] != 'X') { free++; if (D[r][s][0][0] == 1) { goodfree++; } } } /*REP(r,R) { printf("LL %s\n", mapa[r]); } printf("LL %s\n", program);*/ if (free == goodfree) { printf("OK\n"); } else { printf("%d\n", goodfree); } } int main(){ while(scanf("%d%d ",&R,&S)>0){ solve(); } return 0; }