#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
#define MAXN 501
int r,c,m;string s;
bitset<MAXN> a[MAXN];
bitset<MAXN> dp[MAXN];
bitset<MAXN> newdp[MAXN];
int main()
{
cin>>r>>c>>m;
for (int row=1;row<=r;row++)
{
string state;cin>>state;
for (int col=1;col<=c;col++)
{
if (state[col-1]=='#') a[row][col]=0;
else a[row][col]=1;
dp[row][col]=a[row][col];
}
}
cin>>s;
for (int pos=0;pos<m;pos++)
{
for (int row=1;row<=r;row++)
{
if (s[pos]=='?')
{
if (row!=1) newdp[row-1]|=dp[row];
if (row!=r) newdp[row+1]|=dp[row];
newdp[row]|=(dp[row]<<1);newdp[row]|=(dp[row]>>1);
continue;
}
if (s[pos]=='N' and row!=1) newdp[row-1]|=dp[row];
if (s[pos]=='S' and row!=r) newdp[row+1]|=dp[row];
if (s[pos]=='W') newdp[row]=(dp[row]>>1);
if (s[pos]=='E') newdp[row]=(dp[row]<<1);
}
swap(dp,newdp);for (int row=1;row<=r;row++) {dp[row]&=a[row];newdp[row].reset();}
}
int answer=0;
for (int row=1;row<=r;row++)
{
for (int col=1;col<=c;col++) answer+=dp[row][col];
}
cout<<answer<<endl;return 0;
}