#include<bits/stdc++.h>
using namespace std;
bitset<500> g[500];
bitset<500> can[500];
int main() {
int R,C,M; cin >> R >> C >> M;
for(int i = 0; i < R; i++) {
string s; cin >> s;
for(int j = 0; j < C; j++) {
g[i][j] = (s[j] == '.');
}
}
string m; cin >> m;
for(int i = 0; i < R; i++)
for(int j = 0; j < C; j++) {
can[i][j] = g[i][j];
}
//14 36
for(auto e : m) {
if(e == 'W') {
for(int i = 0; i < R; i++) {
can[i] = (can[i] >> 1);
}
} else if (e == 'E') {
for(int i = 0; i < R; i++) {
can[i] = (can[i] << 1);
}
} else if(e == 'S') {
//14 39
for(int i = R-1; i > 0; i--) {
can[i] = can[i-1];
}
can[0] = 0;
} else if(e == 'N') {
//14 39
for(int i = 0; i < R-1; i++) {
can[i] = can[i+1];
}
can[R-1] = 0;
} else {
bitset<500> t[500];
for(int x = 0; x < 500; x++) {
t[x] = ((x!=0)? can[x-1] : 0) | (can[x] << 1) | (can[x] >> 1) | ((x!=R-1)? can[x+1] : 0) ;
}
for(int i = 0; i < 500; i++) can[i] = t[i];
}
for(int i = 0; i < 500; i++) {
can[i] = can[i] & g[i];
}
/*
cout << "Map \n";
for(int i = 0; i < R; i++) {
for(int j = 0; j < C; j++) {
if(g[i][j] == 0) {cout << "-"; continue;}
cout << (can[i][j]==1)? '#' : '.';
}
cout << endl;
}
*/
}
int cnt = 0;
for(int i = 0; i < R; i++) {
for(int j = 0; j < C; j++) {
if(can[i][j] == 1) cnt++;
}
}
cout << cnt << endl;
}