具体b站有.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=65;
int n,m,t,acts;//代表n行m列.t时间,act个操作
string ops[10];
string act[10];
ll F[N],A[N][N][N],AA[N][N];
int num(int x,int y) { return (x-1)*m+y; }
void mul(ll f[N],ll a[N][N])
{
    ll c[N];
    memset(c,0,sizeof c);
    for(int j=0;j<N;j++)
    {
        for(int k=0;k<N;k++)
        {
            c[j]+=a[k][j]*f[k];
        }
    }
    memcpy(f,c,sizeof c);
}

void mulb(ll a[N][N],ll b[N][N])
{
    ll c[N][N];
    memset(c,0,sizeof c);
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            for(int k=0;k<N;k++)
            {
                c[i][j]+=a[i][k]*b[k][j];
            }
        }
    }
    memcpy(a,c,sizeof c);
}

void mulself(ll a[N][N]) 
{
    ll c[N][N];
    memset(c,0,sizeof c);
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            for(int k=0;k<N;k++)
            {
                c[i][j]+=a[i][k]*a[k][j];
            }
        }
    }
    memcpy(a,c,sizeof c);
}

void init()
{
    F[0]=1;
    for(int k=0;k<60;k++)
    {
        A[k][0][0]=1;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                int idx=ops[i-1][j-1]-'0';
                int idy=k%act[idx].size();
                char ch=act[idx][idy];
                if(ch=='N')
                {
                    if(i-1>=1) A[k][num(i,j)][num(i-1,j)]=1;
                }
                else if(ch=='S')
                {
                    if(i+1<=n) A[k][num(i,j)][num(i+1,j)]=1;
                }
                else if(ch=='E')
                {
                    if(j+1<=m) A[k][num(i,j)][num(i,j+1)]=1;
                }
                else if(ch=='W')
                {
                    if(j-1>=1) A[k][num(i,j)][num(i,j-1)]=1;
                }
                else if(ch=='D')
                {
                    A[k][num(i,j)][num(i,j)]=0;
                }
                else
                {
                    A[k][num(i,j)][num(i,j)]=1;
                    A[k][0][num(i,j)]=ch-'0';
                }
            }
        }
    }
    for(int i=0;i<N;i++)
    {
        AA[i][i]=1;
    }
    for(int k=0;k<60;k++)
    {
        mulb(AA,A[k]);
    }
}

int main()
{
    cin>>n>>m>>t>>acts;
    for(int i=0;i<n;i++) cin>>ops[i];
    for(int i=0;i<acts;i++) cin>>act[i];
    init();//预处理下60.
    int q=t/60;
    int r=t%60;
    while(q)
    {
        if(q&1) mul(F,AA);
        mulself(AA);
        q>>=1;
    }
    for(int i=0;i<r;i++)
    {
        mul(F,A[i]);
    }
    ll ans=0;
    for(int i=1;i<N;i++)
    {
        ans=max(ans,F[i]);
    }
    cout<<ans<<endl;
    return 0;
}