#include<iostream>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<queue>
#include<vector>
#include<stdio.h>
#include<map>
#include<set>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#include<bitset>
using namespace std;
int n,m,t,act;
int book[10][10];
string c[15];
string ca[15];
int ti[65][100][100];
int a[100];
int main(){
a[0]=1;
cin>>n>>m>>t>>act;
for(int i=1;i<=n;i++){
cin>>c[i];
c[i]=" "+c[i];
}
for(int i=0;i<act;i++){
string s;
cin>>s;
ca[i]=s;
while(ca[i].size()<=60){
ca[i]+=s;
}
ca[i]=" "+ca[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int v=c[i][j]-'0';
for(int k=1;k<=60;k++){
if(ca[v][k]=='N'&&i!=1){
ti[k][i*m-m+j][i*m-m-m+j]=1;
}else if(ca[v][k]=='W'&&j!=1){
ti[k][i*m-m+j][i*m-m+j-1]=1;
}else if(ca[v][k]=='S'&&i!=n){
ti[k][i*m-m+j][i*m+j]=1;
}else if(ca[v][k]=='E'&&j!=m){
ti[k][i*m-m+j][i*m-m+j+1]=1;
}else if(ca[v][k]>='0'&&ca[v][k]<='9'){
ti[k][0][i*m-m+j]=ca[v][k]-'0';
ti[k][i*m-m+j][i*m-m+j]=1;
}
}
}
}
for(int i=1;i<=60;i++)ti[i][0][0]=1;
for(int tim=2;tim<=60;tim++){
int c[100][100]={0};
for(int i=0;i<=n*m;i++){
for(int j=0;j<=n*m;j++){
for(int k=0;k<=n*m;k++){
c[i][j]+=ti[tim-1][i][k]*ti[tim][k][j];
}
}
}
for(int i=0;i<=n*m;i++){
for(int j=0;j<=n*m;j++){
ti[tim][i][j]=c[i][j];
}
}
}
int d=t/60;
while(d){
if(d&1){
int c[100]={0};
for(int j=0;j<=n*m;j++){
for(int k=0;k<=n*m;k++){
c[j]+=a[k]*ti[60][k][j];
}
}
for(int j=0;j<=n*m;j++)a[j]=c[j];
}
int c[100][100]={0};
for(int i=0;i<=n*m;i++){
for(int j=0;j<=n*m;j++){
for(int k=1;k<=n*m;k++){
c[i][j]+=ti[60][i][k]*ti[60][k][j];
}
}
}
for(int i=0;i<=n*m;i++){
for(int j=0;j<=n*m;j++){
ti[60][i][j]=c[i][j];
}
}
d>>=1;
}
t=t%60;
int c[100]={0};
for(int j=0;j<=n*m;j++){
for(int k=0;k<=n*m;k++){
c[j]+=a[k]*ti[t][k][j];
}
}
for(int j=0;j<=n*m;j++)a[j]=c[j];
int maxn=0;
for(int i=1;i<=n*m;i++){
maxn=max(maxn,a[i]);
}
cout<<maxn;
return 0;
}