#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<random>
#include<map>
#include<set>
#include<bitset>
#include<stack>
#include<unordered_map>
#include<utility>
#include<cassert>
using namespace std;

typedef long long ll;

typedef unsigned long long ul;
typedef unsigned int ui;
const ll mod = 1000000007;
const ll INF = mod * mod;
typedef pair<int, int> P;
#define stop char nyaa;cin>>nyaa;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define rep1(i,n) for(int i=1;i<=n;i++)
#define per1(i,n) for(int i=n;i>=1;i--)
#define Rep1(i,sta,n) for(int i=sta;i<=n;i++)
typedef pair<ll, ll> LP;
typedef vector<int> vec;
typedef vector<string> svec;
typedef long double ld;
typedef pair<ld, ld> LDP;
const ld eps = 1e-8;

void to_unique(vector<int> &v) {
	sort(v.begin(), v.end());
	v.erase(unique(v.begin(), v.end()), v.end());
}

void solve() {
	int n; cin >> n;
	vector<P> h;
	h.push_back({ 0,50 });
	rep(i, n) {
		int x, y; cin >> x >> y;
		h.push_back({ x,y });
	}
	h.push_back({ 100,50 });
	int m; cin >> m;
	vector<P> f;
	rep(i, m) {
		int x, y; cin >> x >> y;
		f.push_back({ x,y });
	}
	int l; cin >> l;
	rep(i, l) {
		ld le = 0, ri = 50;
		int x;ld t; cin >> x >> t;
		int id = lower_bound(h.begin(), h.end(), P{ x,-1 }) - h.begin();
		rep(aa, 100) {
			ld mid = (le + ri) / 2.0;
			int l = id - 1, r = id;
			while (h[r].second < mid) {
				r++;
			}
			while (h[l].second < mid) {
				l--;
			}
			vector<int> vl,vr;
			vl.push_back(l);
			while (l > 0) {
				int memo = h[l].second;
				l--;
				while (h[l].second < memo) {
					l--;
				}
				vl.push_back(l);
			}
			vr.push_back(r);
			while (r<(int)h.size()-1) {
				int memo = h[r].second;
				r++;
				while (h[r].second < memo) {
					r++;
				}
				vr.push_back(r);
			}
			ld ad = 0;
			for (int j = (int)vl.size() - 1; j > 0; j--) {
				int xle = vl[j], xri = vl[j - 1];
				ld sum = 0;
				rep(k, f.size()) {
					if (h[xle].first < f[k].first&&f[k].first < h[xri].first) {
						sum += f[k].second;
					}
				}
				sum *= t;
				sum += ad;
				ld V = (h[xri].first - h[xle].first)*h[vl[j - 1]].second * 30;
				sum -= V;
				if (sum < 0)sum = 0;
				ad = sum;
			}
			ld ad2 = 0;
			for (int j = (int)vr.size() - 1; j > 0; j--) {
				int xle = vr[j - 1], xri = vr[j];
				ld sum = 0;
				rep(k, f.size()) {
					if (h[xle].first < f[k].first&&f[k].first < h[xri].first) {
						sum += f[k].second;
					}
				}
				sum *= t;
				sum += ad2;
				ld V = (h[xri].first - h[xle].first)*h[vr[j - 1]].second * 30;
				sum -= V;
				if (sum < 0)sum = 0;
				ad2 = sum;
			}
			int xle = vl[0], xri = vr[0];
			ld sum = 0;
			rep(k, f.size()) {
				if (h[xle].first < f[k].first&&f[k].first < h[xri].first) {
					sum += f[k].second;
				}
			}
			sum *= t;
			sum += ad + ad2;
			ld V = (h[xri].first - h[xle].first)*mid * 30;
			//cout << mid << " "<<V<<" " << sum << endl;
			if (sum > V)le = mid;
			else {
				ri = mid;
			}
		}
		cout << ri << endl;
	}

}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout << fixed << setprecision(10);
	//init();
	/*while (cin >> n>>l, n) {
		solve();
	}*/
	int d; cin >> d;
	rep(aa, d) {
		solve();
	}
	//stop
	return 0;
}


Measured memory_bytes: 3224