#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <valarray>
#include <vector>

#define EPS 1e-9
#define INF 1070000000LL
#define MOD 1000000007LL
#define fir first
#define foreach(it,X) for(__typeof((X).begin()) it=(X).begin();it!=(X).end();it++)
#define ite iterator
#define mp make_pair
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(int i=m;i<(n);i++)
#define pb push_back
#define sec second
#define sz(x) ((int)(x).size())

using namespace std;

struct timer{
	time_t start;
	timer(){start=clock();}
	~timer(){cerr<<1.*(clock()-start)/CLOCKS_PER_SEC<<" secs"<<endl;}
};

typedef istringstream iss;
typedef long long ll;
typedef pair<int,int> pi;
typedef stringstream sst;
typedef vector<int> vi;

int N,B[11],H[11],M,F[11],A[11],L,P[11],T[11];
pair<int,pi> ev[11];
double ans[11];
int wall[111];

struct space{
	int from,to;
	double h,water;
};

void main2(){
	
	wall[0] = 50;
	rep(i,N){
		wall[B[i]] = H[i];
	}
	wall[100] = 50;
	
	rep(i,L)ev[i]=mp(T[i],mp(P[i],i));
	sort(ev,ev+L);
	
	vector<space> v;
	v.pb(space{0,B[0],0,0});
	rep(i,N-1)v.pb(space{B[i],B[i+1],0,0});
	v.pb(space{B[N-1],100,0,0});
	
	rep(i,M){
		if(F[i] < B[0]) v[0].water += A[i];
		if(F[i] > B[N-1]) v[N].water += A[i];
		rep(j,N-1)if(B[j] < F[i] && F[i] < B[j+1]){
			v[j+1].water += A[i];
		}
	}
	
	double t=0;
	int curev=0;
	while(1){
		double nt=INF;
		int full=-1;
		rep(i,sz(v)){
			if(v[i].water==0)continue;
			int to=v[i].to,from=v[i].from;
			double h=v[i].h;
			double restV = (to - from)*30*(min(wall[from],wall[to])-h);
			double T = t + restV / v[i].water;
			if(T < nt){
				nt = T;
				full = i;
			}
		}
		
		while(curev < L && ev[curev].fir < nt){
			int pos=ev[curev].sec.fir;
			int ind;
			rep(i,sz(v)){
				if(v[i].from < pos && pos < v[i].to){
					ind=i;break;
				}
			}
			double S = (v[ind].to - v[ind].from)*30;
			ans[ev[curev].sec.sec] = v[ind].h + (ev[curev].fir-t)*v[ind].water/S;
			curev++;
		}
		
		rep(i,sz(v)){
			double S = (v[i].to - v[i].from)*30;
			v[i].h += (nt-t)*v[i].water/S;
		}
		
		//cout<<nt<<endl;
		//rep(i,sz(v))cout<<v[i].h<<"/"<<v[i].water<<"/"
		//<<v[i].from<<"-"<<v[i].to<<" ";cout<<endl;
		
		int next;
		if(abs(v[full].h - wall[v[full].from])<EPS){
			next=full-1;
		}else next=full+1;
		if(next==-1 || next==sz(v))break;
		//cout<<full<<" "<<next<<endl;
		
		vector<space> w;
		rep(i,min(full,next)){
			w.pb(v[i]);
		}
		
		if(abs(v[full].h - v[next].h)<EPS){
			int nfrom = min(v[full].from,v[next].from);
			int nto = max(v[full].to,v[next].to);
			double nh = v[full].h;
			double nwater = v[full].water + v[next].water;
			w.pb(space{nfrom,nto,nh,nwater});
		}else{
			rep2(i,min(full,next),max(full,next)+1){
				w.pb(v[i]);
			}
			w[next].water += w[full].water;
			w[full].water = 0;
		}
		
		rep2(i,max(full,next)+1,sz(v)){
			w.pb(v[i]);
		}
		
		v=w;
		t=nt;
	}
	
	while(curev < L)ans[ev[curev++].sec.sec]=50;
	
	rep(i,L)cout<<fixed<<setprecision(16)<<ans[i]<<endl;
}

int main(){
	cin.tie(0);
	ios_base::sync_with_stdio(0);
	
	int D;
	cin>>D;
	while(D--){
		cin>>N;
		rep(i,N)cin>>B[i]>>H[i];
		cin>>M;
		rep(i,M)cin>>F[i]>>A[i];
		cin>>L;
		rep(i,L)cin>>P[i]>>T[i];
		main2();
	}
}

Measured memory_bytes: 1288