#include <bits/stdc++.h>

using ll = long long;
using namespace std;
int mod = 1e9 + 7;
struct mod_int {
    int v = 0;
    mod_int(int nv = 0) {
        v = nv;
        if (v < 0 || v >= mod) {
            v = (v % mod + mod) % mod;
        }
    }
};
mod_int operator + (mod_int v1, mod_int v2) {
    return (v1.v + v2.v >= mod ? v1.v + v2.v - mod : v1.v + v2.v);
}
mod_int operator -(mod_int v1, mod_int v2) {
    return (v1.v - v2.v < 0 ? v1.v - v2.v + mod : v1.v - v2.v);
}
mod_int operator *(mod_int v1, mod_int v2) {
    return (1LL * v1.v * v2.v) % mod;
}
bool operator == (mod_int v1, mod_int v2) {
    return v1.v == v2.v;
}
bool operator < (mod_int v1, mod_int v2) {
    return v1.v < v2.v;
}

//void solve() {
//    ll n, q;
//    cin >> n >> q;
//    vector <vector <ll>> gr(n);
//    vector <ll> prev(n, - 1);
//    for (ll i = 1; i < n; ++i) {
//        ll p;;
//        cin >> p;
//        --p;
//        prev[i] = p;
//        gr[p].push_back(i);
//    }
//    vector <ll> val(n);
//    for (ll i = 0; i < n; ++i) {
//        cin >> val[i];
//    }
//    set <pair <ll, ll>> now{};
//    now.emplace(- val[0], 0);
//    vector <ll> ind(n);
//    ll time = 0;
//    vector <ll> p{};
//    while (!now.empty()) {
//        ll num = now.begin()->second;
//        p.push_back(num);
//        ind[num] = time;
//        ++time;
//        now.erase(now.begin());
//        for (auto next : gr[num]) {
////            cout << next + 1 << ' ' << num << '\n';
//            now.insert({- val[next], next});
//        }
//    }
////    for (auto num : p) {
////        cout << num + 1 << ' ';
////    }
////    cout << '\n';
//    vector <ll> ans = ind;
//    vector <ll> counter(n, 0);
//    for (ll num : p) {
//        ll cur = prev[num], last = num;
//        while (cur != - 1) {
//            for (auto next : gr[cur]) {
//                if (next != last) {
////                    cout << num + 1 << " " << next + 1 << '\n';
//                    ans[num] = min(ans[num], ind[num] - counter[next]);
//                }
//            }
//            cur = prev[cur];
//            last = prev[last];
//        }
//        cur = num;
//        while (cur != - 1) {
//            ++counter[cur];
//            cur = prev[cur];
//        }
//    }
//    for (ll i = 0; i < q; ++i) {
//        ll num;
//        cin >> num;
//        --num;
//        cout << ans[num] << ' ';
//    }
//    cout << '\n';
//}
vector <vector <int>> get(vector <int> &val, int n, int k) {
    vector <vector <int>> next(n + 1, vector <int> (k, n));
    vector <int> now(k, n + 1);
    for (int i = n; i >= 0; --i) {
        next[i] = now;
        if (i != 0) {
            now[val[i - 1]] = i;
        }
    }
    return next;
}
void solve() {
    int N, n, M, m, k;
    int q;
    cin >> N >> n >> M >> m >> k;
    cin >> q;
    vector <int> a, b;
    for (int i = 0; i < n; ++i) {
        int len, v;
        cin >> len >> v;
        --v;
        for (int j = 0; j < len; ++j) {
            a.push_back(v);
        }
    }
    for (int i = 0; i < m; ++i) {
        int len, v;
        cin >> len >> v;
        --v;
        for (int j = 0; j < len; ++j) {
            b.push_back(v);
        }
    }
    n = N;
    m = M;
//    for (int i = 0; i < n; ++i) {
//        cout << a[i] << ' ';
//    }
//    cout << '\n';
//    for (int j = 0; j < m; ++j) {
//        cout << b[j] << ' ';
//    }
//    cout << '\n';
    vector <vector <int>> dp(n + 2, vector <int> (m + 2, 0));
    for (int i = 0; i < m + 2; ++i) {
        dp[n + 1][i] = 1;
    }
    for (int i = 0; i < n + 2; ++i) {
        dp[i][m + 1] = 1;
    }
    vector <vector <int>> anext = get(a, n, k), bnext = get(b, m, k);
    vector <int> cur(k, 0);
//    for (int i = 0; i < n + 1; ++i) {
//        for (int j = 0; j < k; ++j) {
//            cout << anext[i][j] << ' ';
//        }
//        cout << '\n';
//    }
//    for (int i = 0; i < m + 1; ++i) {
//        for (int j = 0; j < k; ++j) {
//            cout << bnext[i][j] << ' ';
//        }
//        cout << '\n';
//    }
    for (int i = n; i >= 0; --i) {
        int sum = k;
        fill(cur.begin(), cur.end(), 1);
        for (int j = m; j >= 0; --j) {
            if (sum == k) {
                dp[i][j] = 0;
            } else {
                dp[i][j] = 1;
            }
            if (j != 0) {
                sum -= cur[b[j - 1]];
                cur[b[j - 1]] = dp[anext[i][b[j - 1]]][j];
                sum += cur[b[j - 1]];
            }
        }
    }
//    for (int i = 0; i < n + 2; ++i) {
//        for (int j = 0; j < m + 2; ++j) {
//            cout << dp[i][j] << ' ';
//        }
//        cout << '\n';
//    }
    for (int i = 0; i < q; ++i) {
        int x, y;
        cin >> x >> y;
        cout << (dp[x][y] ? "Yes" : "No") << '\n';
    }
}
signed main() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    int t = 1;
//    cin >> t;
    for (int i = 0; i < t; ++i) {
        solve();
    }
}
