#include<bits/stdc++.h>
using namespace std;
#define all(x) x.begin(),x.end()
#define siz(x) ((int)x.size())
#define pb push_back
#define fi first
#define se second
const int N=105;
__int128 INT128_MAX=1145141919810;
int n,m,k,tx,ty,a[N][N];
struct Bacteria{
int x,y,direct;
int dis[4],len;
}b[5];
int id[N][N][4],ID;
struct OPPO{
int x,y,direct;
}op[N*N*4];
int to[N*N*4];
string s;
int dis[N*N*4];
inline void dfs(int x,int step,int p){
if(~dis[x]){b[p].len=step-dis[x];return ;}
dis[x]=step;
auto [X,Y,D]=op[x];
if(X==tx&&Y==ty)b[p].dis[D]=step;
int To=to[x];
dfs(To,step+1,p);
}
struct Mod{
__int128 val,mod;
};
vector<Mod>h;
inline __int128 exgcd(__int128 A,__int128 B,__int128&x,__int128&y){
if(B==0){x=1,y=0;return A;}
__int128 D=exgcd(B,A%B,y,x);
y-=A/B*x;
return D;
}
inline __int128 exCRT(){
__int128 lcm=h[0].mod,ans=h[0].val%h[0].mod;
for(int i=1;i<k;i++){
__int128 g=(h[i].val%h[i].mod-ans%h[i].mod+h[i].mod)%h[i].mod;
__int128 x,y,d=exgcd(lcm,h[i].mod,x,y);
if(g%d)return INT128_MAX;
x*=(g/d)%(h[i].mod/d);
ans+=x*lcm;
lcm=lcm*h[i].mod/d;
ans=(ans%lcm+lcm)%lcm;
}
ans=(ans%lcm+lcm)%lcm;
for(auto [val,mod]:h)while(ans<=val)ans+=lcm;
return ans;
}
int main(){
INT128_MAX*=INT128_MAX;
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m>>k>>tx>>ty;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)for(int l=0;l<4;l++)id[i][j][l]=++ID,op[ID]={i,j,l};
for(int t=0;t<k;t++){
cin>>b[t].x>>b[t].y>>s;
if(s[0]=='U')b[t].direct=0;
if(s[0]=='R')b[t].direct=1;
if(s[0]=='D')b[t].direct=2;
if(s[0]=='L')b[t].direct=3;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=1;j<=m;j++)a[i][j]=s[j-1]-'0';
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int l=0;l<4;l++){
int nxt=(l+a[i][j])%4;
if(i==1&&nxt==0)nxt=2;
if(i==n&&nxt==2)nxt=0;
if(j==1&&nxt==3)nxt=1;
if(j==m&&nxt==1)nxt=3;
int fx=i,fy=j;
if(nxt==0)fx--;
if(nxt==1)fy++;
if(nxt==2)fx++;
if(nxt==3)fy--;
to[id[i][j][l]]=id[fx][fy][nxt];
}
}
}
memset(dis,-1,sizeof(dis));memset(b[t].dis,-1,sizeof(b[t].dis));
dfs(id[b[t].x][b[t].y][b[t].direct],0,t);
}
__int128 ans=INT128_MAX;
for(int i=0;i<(1<<(2*k));i++){
h.clear();
bool flag=1;
for(int j=0;j<k;j++){
int w=(i>>(2*j))&3;
if(b[j].dis[w]==-1){flag=0;break;}
h.pb({b[j].dis[w],b[j].len});
}
if(flag)ans=min(ans,exCRT());
}
if(ans==INT128_MAX)cout<<"-1\n";
else cout<<((long long)ans+1)<<"\n";
return 0;
}