// ~~ icebear ~~
#include <bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
template<class T>
bool minimize(T &a, const T &b) {
if (a > b) return a = b, true;
return false;
}
template<class T>
bool maximize(T &a, const T &b) {
if (a < b) return a = b, true;
return false;
}
#define FOR(i,a,b) for(int i=(a); i<=(b); ++i)
#define FORR(i,a,b) for(int i=(a); i>=(b); --i)
#define REP(i, n) for(int i=0; i<(n); ++i)
#define RED(i, n) for(int i=(n)-1; i>=0; --i)
#define MASK(i) (1LL << (i))
#define BIT(S, i) (((S) >> (i)) & 1)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(x) x.begin(), x.end()
#define task "starofhope"
const int MOD = 1e9 + 7;
const int inf = 1e9 + 27092008;
const ll INF = 1e18 + 27092008;
const int N = 3e5 + 5;
int n, m, M, p, q, x[N], y[N], top[N], bot[N], lef[N], rig[N];
vector<ii> G[2][N];
vector<int> comx, comy;
int dist[N][2];
priority_queue<iii, vector<iii>, greater<iii>> Q;
int ft[2][N];
void update(int t, int x, int v) {
for(; x <= M; x += x & -x) ft[t][x] += v;
}
int get(int t, int x) {
int ans = 0;
for(; x; x -= x & -x) ans += ft[t][x];
return ans;
}
void upd(int l, int r, int v) {
update(0, l, l * v); update(0, r+1, -(r+1) * v);
update(1, l, v); update(1, r+1, -v);
}
int ask(int l, int r) {
return (get(1, r) * (r + 1) - get(0, r)) - (get(1, l - 1) * l - get(0, l - 1));
}
vector<ii> line[N];
vector<array<int, 3>> rect[N];
void buildGraph(bool S) {
if (S) {
FOR(i, 1, p + 2) swap(x[i], y[i]);
FOR(i, 1, q) {
swap(lef[i], bot[i]);
swap(rig[i], top[i]);
}
swap(comx, comy);
}
M = p + 2 + 2 * q;
FOR(i, 1, M) line[i].clear();
FOR(i, 1, M) rect[i].clear();
FOR(i, 1, M) ft[0][i] = ft[1][i] = 0;
FOR(i, 1, p + 2) line[x[i]].pb(mp(y[i], i));
FOR(i, 1, M) sort(all(line[i]));
FOR(i, 1, q) {
rect[lef[i]].pb({bot[i], top[i], +1ll});
rect[rig[i]+1].pb({bot[i], top[i], -1ll});
}
FOR(i, 1, M) {
for(auto &e : rect[i]) upd(e[0], e[1], e[2]);
FOR(j, 1, (int)line[i].size() - 1) {
if (ask(line[i][j-1].fi, line[i][j].fi) == 0) {
int u = line[i][j].se, v = line[i][j-1].se;
// cout << u << ' ' << v << ' ' << S << ' ' << comy[y[u]-1] << ' ' << comy[y[v]-1] << ' ' << abs(comy[y[u]-1] - comy[y[v]-1]) << '\n';
G[S][u].pb(mp(v, abs(comy[y[u]-1] - comy[y[v]-1])));
G[S][v].pb(mp(u, abs(comy[y[u]-1] - comy[y[v]-1])));
}
}
}
}
void init(void) {
cin >> n >> m >> p >> q;
FOR(i, 1, p) cin >> x[i] >> y[i];
x[p + 1] = y[p + 1] = 1;
x[p + 2] = n; y[p + 2] = m;
FOR(i, 1, p + 2) {
comx.pb(x[i]);
comy.pb(y[i]);
}
FOR(i, 1, q) {
cin >> lef[i] >> bot[i] >> rig[i] >> top[i];
comx.pb(lef[i]); comx.pb(rig[i]);
comy.pb(bot[i]); comy.pb(top[i]);
}
sort(all(comx)); sort(all(comy));
comx.resize(unique(all(comx)) - comx.begin());
comy.resize(unique(all(comy)) - comy.begin());
FOR(i, 1, p + 2) {
x[i] = upper_bound(all(comx), x[i]) - comx.begin();
y[i] = upper_bound(all(comy), y[i]) - comy.begin();
}
FOR(i, 1, q) {
lef[i] = upper_bound(all(comx), lef[i]) - comx.begin();
rig[i] = upper_bound(all(comx), rig[i]) - comx.begin();
bot[i] = upper_bound(all(comy), bot[i]) - comy.begin();
top[i] = upper_bound(all(comy), top[i]) - comy.begin();
}
}
void process(void) {
REP(j, 2) buildGraph(j);
FOR(i, 1, p + 2) REP(j, 2) dist[i][j] = INF;
Q.push(mp(0, mp(p + 1, 1)));
dist[p + 1][1] = 0;
while(!Q.empty()) {
int du = Q.top().fi, u = Q.top().se.fi, t = Q.top().se.se;
Q.pop();
if (du != dist[u][t]) continue;
if (u <= p && minimize(dist[u][t^1], dist[u][t] + 1))
Q.push(mp(dist[u][t^1], mp(u, t^1)));
// cout << u << ' ' << t << ' ' << dist[u][t] << '\n';
for(ii x : G[t][u]) {
int v, w; tie(v, w) = x;
if (minimize(dist[v][t], dist[u][t] + w))
Q.push(mp(dist[v][t], mp(v, t)));
}
}
int ans = min(dist[p+2][0], dist[p+2][1]);
cout << (ans == INF ? -1 : ans) << '\n';
// cerr << (ans == INF ? -1 : ans) << '\n';
FOR(i, 1, p + 2) {
G[0][i].clear();
G[1][i].clear();
}
comx.clear(); comy.clear();
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
if (fopen(task".inp", "r")) {
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
int tc = 1;
cin >> tc;
while(tc--) {
init();
process();
}
return 0;
}
Ly8gfn4gaWNlYmVhciB+fgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOwp0eXBlZGVmIHBhaXI8aW50LCBpaT4gaWlpOwoKdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGJvb2wgbWluaW1pemUoVCAmYSwgY29uc3QgVCAmYikgewogICAgICAgIGlmIChhID4gYikgcmV0dXJuIGEgPSBiLCB0cnVlOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCnRlbXBsYXRlPGNsYXNzIFQ+CiAgICBib29sIG1heGltaXplKFQgJmEsIGNvbnN0IFQgJmIpIHsKICAgICAgICBpZiAoYSA8IGIpIHJldHVybiBhID0gYiwgdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKTsgaTw9KGIpOyArK2kpCiNkZWZpbmUgRk9SUihpLGEsYikgZm9yKGludCBpPShhKTsgaT49KGIpOyAtLWkpCiNkZWZpbmUgUkVQKGksIG4pIGZvcihpbnQgaT0wOyBpPChuKTsgKytpKQojZGVmaW5lIFJFRChpLCBuKSBmb3IoaW50IGk9KG4pLTE7IGk+PTA7IC0taSkKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVChTLCBpKSAoKChTKSA+PiAoaSkpICYgMSkKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSB0YXNrICJzdGFyb2Zob3BlIgoKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmNvbnN0IGludCBpbmYgPSAxZTkgKyAyNzA5MjAwODsKY29uc3QgbGwgSU5GID0gMWUxOCArIDI3MDkyMDA4Owpjb25zdCBpbnQgTiA9IDNlNSArIDU7CmludCBuLCBtLCBNLCBwLCBxLCB4W05dLCB5W05dLCB0b3BbTl0sIGJvdFtOXSwgbGVmW05dLCByaWdbTl07CnZlY3RvcjxpaT4gR1syXVtOXTsKdmVjdG9yPGludD4gY29teCwgY29teTsKaW50IGRpc3RbTl1bMl07CnByaW9yaXR5X3F1ZXVlPGlpaSwgdmVjdG9yPGlpaT4sIGdyZWF0ZXI8aWlpPj4gUTsKaW50IGZ0WzJdW05dOwp2b2lkIHVwZGF0ZShpbnQgdCwgaW50IHgsIGludCB2KSB7CiAgICBmb3IoOyB4IDw9IE07IHggKz0geCAmIC14KSBmdFt0XVt4XSArPSB2Owp9CmludCBnZXQoaW50IHQsIGludCB4KSB7CiAgICBpbnQgYW5zID0gMDsKICAgIGZvcig7IHg7IHggLT0geCAmIC14KSBhbnMgKz0gZnRbdF1beF07CiAgICByZXR1cm4gYW5zOwp9CnZvaWQgdXBkKGludCBsLCBpbnQgciwgaW50IHYpIHsKICAgIHVwZGF0ZSgwLCBsLCBsICogdik7IHVwZGF0ZSgwLCByKzEsIC0ocisxKSAqIHYpOwogICAgdXBkYXRlKDEsIGwsIHYpOyB1cGRhdGUoMSwgcisxLCAtdik7Cn0KaW50IGFzayhpbnQgbCwgaW50IHIpIHsKICAgIHJldHVybiAoZ2V0KDEsIHIpICogKHIgKyAxKSAtIGdldCgwLCByKSkgLSAoZ2V0KDEsIGwgLSAxKSAqIGwgLSBnZXQoMCwgbCAtIDEpKTsKfQoKdmVjdG9yPGlpPiBsaW5lW05dOwp2ZWN0b3I8YXJyYXk8aW50LCAzPj4gcmVjdFtOXTsKCnZvaWQgYnVpbGRHcmFwaChib29sIFMpIHsKICAgIGlmIChTKSB7CiAgICAgICAgRk9SKGksIDEsIHAgKyAyKSBzd2FwKHhbaV0sIHlbaV0pOwogICAgICAgIEZPUihpLCAxLCBxKSB7CiAgICAgICAgICAgIHN3YXAobGVmW2ldLCBib3RbaV0pOwogICAgICAgICAgICBzd2FwKHJpZ1tpXSwgdG9wW2ldKTsKICAgICAgICB9CiAgICAgICAgc3dhcChjb214LCBjb215KTsKICAgIH0KCiAgICBNID0gcCArIDIgKyAyICogcTsKICAgIEZPUihpLCAxLCBNKSBsaW5lW2ldLmNsZWFyKCk7CiAgICBGT1IoaSwgMSwgTSkgcmVjdFtpXS5jbGVhcigpOwogICAgRk9SKGksIDEsIE0pIGZ0WzBdW2ldID0gZnRbMV1baV0gPSAwOwoKICAgIEZPUihpLCAxLCBwICsgMikgbGluZVt4W2ldXS5wYihtcCh5W2ldLCBpKSk7CiAgICBGT1IoaSwgMSwgTSkgc29ydChhbGwobGluZVtpXSkpOwogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICByZWN0W2xlZltpXV0ucGIoe2JvdFtpXSwgdG9wW2ldLCArMWxsfSk7CiAgICAgICAgcmVjdFtyaWdbaV0rMV0ucGIoe2JvdFtpXSwgdG9wW2ldLCAtMWxsfSk7CiAgICB9CgogICAgRk9SKGksIDEsIE0pIHsKICAgICAgICBmb3IoYXV0byAmZSA6IHJlY3RbaV0pIHVwZChlWzBdLCBlWzFdLCBlWzJdKTsKICAgICAgICBGT1IoaiwgMSwgKGludClsaW5lW2ldLnNpemUoKSAtIDEpIHsKICAgICAgICAgICAgaWYgKGFzayhsaW5lW2ldW2otMV0uZmksIGxpbmVbaV1bal0uZmkpID09IDApIHsKICAgICAgICAgICAgICAgIGludCB1ID0gbGluZVtpXVtqXS5zZSwgdiA9IGxpbmVbaV1bai0xXS5zZTsKLy8gICAgICAgICAgICAgICAgY291dCA8PCB1IDw8ICcgJyA8PCB2IDw8ICcgJyA8PCBTIDw8ICcgJyA8PCBjb215W3lbdV0tMV0gPDwgJyAnIDw8IGNvbXlbeVt2XS0xXSA8PCAnICcgPDwgYWJzKGNvbXlbeVt1XS0xXSAtIGNvbXlbeVt2XS0xXSkgPDwgJ1xuJzsKICAgICAgICAgICAgICAgIEdbU11bdV0ucGIobXAodiwgYWJzKGNvbXlbeVt1XS0xXSAtIGNvbXlbeVt2XS0xXSkpKTsKICAgICAgICAgICAgICAgIEdbU11bdl0ucGIobXAodSwgYWJzKGNvbXlbeVt1XS0xXSAtIGNvbXlbeVt2XS0xXSkpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBpbml0KHZvaWQpIHsKICAgIGNpbiA+PiBuID4+IG0gPj4gcCA+PiBxOwogICAgRk9SKGksIDEsIHApIGNpbiA+PiB4W2ldID4+IHlbaV07CiAgICB4W3AgKyAxXSA9IHlbcCArIDFdID0gMTsKICAgIHhbcCArIDJdID0gbjsgeVtwICsgMl0gPSBtOwoKICAgIEZPUihpLCAxLCBwICsgMikgewogICAgICAgIGNvbXgucGIoeFtpXSk7CiAgICAgICAgY29teS5wYih5W2ldKTsKICAgIH0KCiAgICBGT1IoaSwgMSwgcSkgewogICAgICAgIGNpbiA+PiBsZWZbaV0gPj4gYm90W2ldID4+IHJpZ1tpXSA+PiB0b3BbaV07CiAgICAgICAgY29teC5wYihsZWZbaV0pOyBjb214LnBiKHJpZ1tpXSk7CiAgICAgICAgY29teS5wYihib3RbaV0pOyBjb215LnBiKHRvcFtpXSk7CiAgICB9CgogICAgc29ydChhbGwoY29teCkpOyBzb3J0KGFsbChjb215KSk7CiAgICBjb214LnJlc2l6ZSh1bmlxdWUoYWxsKGNvbXgpKSAtIGNvbXguYmVnaW4oKSk7CiAgICBjb215LnJlc2l6ZSh1bmlxdWUoYWxsKGNvbXkpKSAtIGNvbXkuYmVnaW4oKSk7CgogICAgRk9SKGksIDEsIHAgKyAyKSB7CiAgICAgICAgeFtpXSA9IHVwcGVyX2JvdW5kKGFsbChjb214KSwgeFtpXSkgLSBjb214LmJlZ2luKCk7CiAgICAgICAgeVtpXSA9IHVwcGVyX2JvdW5kKGFsbChjb215KSwgeVtpXSkgLSBjb215LmJlZ2luKCk7CiAgICB9CgogICAgRk9SKGksIDEsIHEpIHsKICAgICAgICBsZWZbaV0gPSB1cHBlcl9ib3VuZChhbGwoY29teCksIGxlZltpXSkgLSBjb214LmJlZ2luKCk7CiAgICAgICAgcmlnW2ldID0gdXBwZXJfYm91bmQoYWxsKGNvbXgpLCByaWdbaV0pIC0gY29teC5iZWdpbigpOwogICAgICAgIGJvdFtpXSA9IHVwcGVyX2JvdW5kKGFsbChjb215KSwgYm90W2ldKSAtIGNvbXkuYmVnaW4oKTsKICAgICAgICB0b3BbaV0gPSB1cHBlcl9ib3VuZChhbGwoY29teSksIHRvcFtpXSkgLSBjb215LmJlZ2luKCk7CiAgICB9Cn0KCnZvaWQgcHJvY2Vzcyh2b2lkKSB7CiAgICBSRVAoaiwgMikgYnVpbGRHcmFwaChqKTsKICAgIEZPUihpLCAxLCBwICsgMikgUkVQKGosIDIpIGRpc3RbaV1bal0gPSBJTkY7CiAgICBRLnB1c2gobXAoMCwgbXAocCArIDEsIDEpKSk7CiAgICBkaXN0W3AgKyAxXVsxXSA9IDA7CiAgICB3aGlsZSghUS5lbXB0eSgpKSB7CiAgICAgICAgaW50IGR1ID0gUS50b3AoKS5maSwgdSA9IFEudG9wKCkuc2UuZmksIHQgPSBRLnRvcCgpLnNlLnNlOwogICAgICAgIFEucG9wKCk7CiAgICAgICAgaWYgKGR1ICE9IGRpc3RbdV1bdF0pIGNvbnRpbnVlOwogICAgICAgIGlmICh1IDw9IHAgJiYgbWluaW1pemUoZGlzdFt1XVt0XjFdLCBkaXN0W3VdW3RdICsgMSkpCiAgICAgICAgICAgIFEucHVzaChtcChkaXN0W3VdW3ReMV0sIG1wKHUsIHReMSkpKTsKLy8gICAgICAgIGNvdXQgPDwgdSA8PCAnICcgPDwgdCA8PCAnICcgPDwgZGlzdFt1XVt0XSA8PCAnXG4nOwogICAgICAgIGZvcihpaSB4IDogR1t0XVt1XSkgewogICAgICAgICAgICBpbnQgdiwgdzsgdGllKHYsIHcpID0geDsKICAgICAgICAgICAgaWYgKG1pbmltaXplKGRpc3Rbdl1bdF0sIGRpc3RbdV1bdF0gKyB3KSkKICAgICAgICAgICAgICAgIFEucHVzaChtcChkaXN0W3ZdW3RdLCBtcCh2LCB0KSkpOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgYW5zID0gbWluKGRpc3RbcCsyXVswXSwgZGlzdFtwKzJdWzFdKTsKICAgIGNvdXQgPDwgKGFucyA9PSBJTkYgPyAtMSA6IGFucykgPDwgJ1xuJzsKLy8gICAgY2VyciA8PCAoYW5zID09IElORiA/IC0xIDogYW5zKSA8PCAnXG4nOwoKICAgIEZPUihpLCAxLCBwICsgMikgewogICAgICAgIEdbMF1baV0uY2xlYXIoKTsKICAgICAgICBHWzFdW2ldLmNsZWFyKCk7CiAgICB9CiAgICBjb214LmNsZWFyKCk7IGNvbXkuY2xlYXIoKTsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpZiAoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBpbnQgdGMgPSAxOwogICAgY2luID4+IHRjOwogICAgd2hpbGUodGMtLSkgewogICAgICAgIGluaXQoKTsKICAgICAgICBwcm9jZXNzKCk7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=