#include <bits/stdc++.h>
using namespace std;
ifstream f("cartite.in");
ofstream g("cartite.out");
struct vulpe{
int x, y, r;
};
struct gcoord{
int x1, y1, x2, y2;
};
int l[201][201], p, k, n, m, G, xc, yc, di[] = {1, 0, 0, -1}, dj[] = {0, 1, -1, 0}, a[201][201], e, lant[201], l1;
pair<int, int> start;
vulpe vl[51];
gcoord gal[101];
void ump(int x, int y, int t)
{
if(t == -1)
return;
l[x][y] = 1;
for(int i = 0; i < 4; i++)
ump(x + di[i], y + dj[i], t - 1);
}
void lee()
{
if(l[xc][yc] == -1)
{
if(p == 1)
g << xc << ' ' << yc << ' ' << 0;
else
start = {xc, yc};
return;
}
queue<pair<int, int>> q;
l[xc][yc] = 1;
q.push({xc, yc});
while (!q.empty())
{
int x = q.front().first, y = q.front().second;
q.pop();
for(int k = 0; k < 4; k++)
{
int xv = di[k] + x, yv = dj[k] + y;
if(xv > 0 && xv <= n && yv > 0 && yv <= m)
{
if(l[xv][yv] == -1)
{
if(p == 1)
g << xv << ' ' << yv << ' ' << l[x][y];
else
start = {xv, yv};
return;
}
else if(!l[xv][yv])
{
l[xv][yv] = l[x][y] + 1;
q.push({xv, yv});
}
}
}
}
}
int main()
{
f >> p >> n >> m >> xc >> yc >> k;
for(int i = 0; i < k; i++)
f >> vl[i].x >> vl[i].y >> vl[i].r;
for(int i = 0; i < k; i++)
ump(vl[i].x, vl[i].y, vl[i].r);
f >> G;
for(int i = 0; i < G; i++)
{
int x1, y1, x2, y2;
f >> x1 >> y1 >> x2 >> y2;
gal[i] = {x1, y1, x2, y2};
if(!l[x1][y1])
l[x1][y1] = -1;
if(!l[x2][y2])
l[x2][y2] = -1;
}
if(p==1)
lee();
return 0;
}