rt
#include<bits/stdc++.h>
using namespace std;
const int N=405;
int n,m,x,y,kk,res,f[N][N][N],tail,head;
struct node{
int val,idx;
}q[N];
char mp[N][N];
int nyt[5]={0,0,0,-1,1},nxt[5]={0,-1,1,0,0};
int main(){
cin>>n>>m>>x>>y>>kk;
for(int i=1;i<=n;i++){
scanf("%s",mp[i]+1);
}
memset(f,0xcf,sizeof(f));
f[0][x][y]=0;
for(int k=1;k<=kk;k++){
head=1;tail=0;
int s,t,d;
cin>>s>>t>>d;
int end=(d<=2?m:n);
int len=t-s+1;
for(int i=1;i<=end;i++){
int nx,ny;
switch(d){
case 1:
nx=n;
ny=i;
break;
case 2:
nx=1;
ny=i;
break;
case 3:
nx=i;
ny=m;
break;
case 4:
nx=i;
ny=1;
break;
}
for(int step=1;nx<=n&&nx>0&&ny<=m&&ny>0;step++,nx+=nxt[d],ny+=nyt[d]){
if(mp[nx][ny]=='x'){
tail=0;
head=1;
}
else{
while(head<=tail&&f[k-1][nx][ny]-step>=q[tail].val-q[tail].idx)tail--;
q[++tail]={f[k-1][nx][ny],step};
if(q[tail].idx-q[head].idx>len)head++;
int v=q[head].val,j=q[head].idx;
f[k][nx][ny]=v+step-j;
res=max(res,f[k][nx][ny]);
}
}
}
}
cout<<res<<endl;
return 0;
}