#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
void read(int &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
void read(ll &x){x=0;int f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;}
const int N=205;
int n,m,x,y,k;
int dp[N][N];
int l[N][N];
int la[N][N];
char c[N][N];
int tx[6]={0,-1,1,0,0},ty[6]={0,0,0,-1,1};
int d;
void work(int x,int y,int f){
deque<pair<int,int> >q;
while(x<=n&&x>=1&&y<=m&&y>=1){
if(c[x][y]=='x')q.clear();
if(!q.empty()){
while(!q.empty()&&abs(x-q.front().first+y-q.front().second)>d){
q.pop_front();
}
if(!q.empty()){
int tmpx=q.front().first,tmpy=q.front().second;
dp[x][y]=max(dp[x][y],l[tmpx][tmpy]+abs(x-tmpx+y-tmpy));
while(!q.empty()&&l[x][y]>=(l[q.front().first][q.front().second]+abs(x+y-q.front().second-q.front().first))){
q.pop_back();
}
}
}
if(c[x][y]!='x')q.push_back(make_pair(x,y));
x+=tx[f];y+=ty[f];
}
}
int main(){
read(n);read(m);read(x);read(y);read(k);
for(int i=1;i<=n;i++){
scanf("%s",c[i]+1);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
dp[i][j]=-998244353;
}
dp[x][y]=0;
for(int lll,r,f,i=1;i<=k;i++){
read(lll);read(r);read(f);
d=r-lll+1;
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)l[i][j]=dp[i][j];
if(f==1){
for(int i=1;i<=m;i++)work(n,i,f);
}else if(f==2){
for(int i=1;i<=m;i++)work(1,i,f);
}else if(f==3){
for(int i=1;i<=n;i++)work(i,m,f);
}else{
for(int i=1;i<=n;i++)work(i,1,f);
}
}
int maxx=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
maxx=max(maxx,dp[i][j]);
}
}
cout<<maxx<<endl;
return 0;
}