#include<bits/stdc++.h>
using namespace std;
#define int long long
#define F(i,k,n) for (int i=k;i<=n;i++)
const int N=2e2+10;
char mp[N][N];
int dp[N][N][N];
int t[N],p[N];
int n,m,x,y,k,ans=0,a,b;
deque<int>dq;
signed main(){
memset(dp,-0x3f,sizeof dp);
cin>>n>>m>>x>>y>>k;
dp[x][y][0]=0;
F(i,1,n) F(j,1,m) cin>>mp[i][j];
F(i,1,k) cin>>a>>b>>p[i],t[i]=b-a+1;
F(now,1,k){
if (p[now]==1){
F(i,1,m){
dq.clear();
for (int j=n;j>=1;j--){
if (mp[j][i]=='x'){
dq.clear();
continue;
}
while (dq.size() && dp[j][i][now-1]>=
dp[dq.front()][i][now-1]+(abs(dq.front()-j)))
dq.pop_front();
dq.push_front(j);
while (dq.size() && abs(j-dq.back())>t[k])
dq.pop_back();
dp[j][i][now]=dp[dq.back()][i][now-1]+abs(dq.back()-j);
ans=max(ans,dp[j][i][now]);
}
}
}
else if (p[now]==2){
F(i,1,m){
dq.clear();
F(j,1,n){
if (mp[j][i]=='x'){
dq.clear();
continue;
}
while (dq.size() && dp[j][i][now-1]>=
dp[dq.front()][i][now-1]+(abs(dq.front()-j)))
dq.pop_front();
dq.push_front(j);
while (dq.size() && abs(j-dq.back())>t[k])
dq.pop_back();
dp[j][i][now]=dp[dq.back()][i][now-1]+abs(dq.back()-j);
ans=max(ans,dp[j][i][now]);
}
}
}
else if (p[now]==3){
F(i,1,n){
dq.clear();
for (int j=m;j>=1;j--){
if (mp[i][j]=='x'){
dq.clear();
continue;
}
while (dq.size() && dp[i][j][now-1]>=
dp[i][dq.front()][now-1]+(abs(dq.front()-j)))
dq.pop_front();
dq.push_front(j);
while (dq.size() && abs(j-dq.back())>t[k])
dq.pop_back();
dp[i][j][now]=dp[i][dq.back()][now-1]+abs(dq.back()-j);
ans=max(ans,dp[i][j][now]);
}
}
}
else{
F(i,1,n){
dq.clear();
F(j,1,m){
if (mp[i][j]=='x'){
dq.clear();
continue;
}
while (dq.size() && dp[i][j][now-1]>=
dp[i][dq.front()][now-1]+(abs(dq.front()-j)))
dq.pop_front();
dq.push_front(j);
while (dq.size() && abs(j-dq.back())>t[k])
dq.pop_back();
dp[i][j][now]=dp[i][dq.back()][now-1]+abs(dq.back()-j);
ans=max(ans,dp[i][j][now]);
}
}
}
}
cout<<ans;
return 0;
}