#include <iostream>
#include<iomanip>
using namespace std;
const int N=1e8;
int k,d,m,f,q,a,b,c,sum,cnt2,cnt3,cnt4;
int gatex[N],backx[N],middlex[N],frontx[N];
//自己写的快排函数
void QuickSort(int arr[],int left,int right)
{
int i=left;
int j=right;
int base=arr[left];
int temp;
if(i>=j){
return;
}
while(i<j)
{
//右边选小
while(i<j&&arr[j]>=base) j--;
//左边选大
while(i<j&&arr[i]<=base) i++;
//选完之后 交换
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
arr[left]=arr[j];
arr[j]=base;
QuickSort(arr,left,j-1);
QuickSort(arr,j+1,right);
}
int main()
{
//输入
cin>>k>>d>>m>>f;
for(int i=1;i<=k;i++) cin>>gatex[i];
for(int i=1;i<=d;i++) cin>>backx[i];
for(int i=1;i<=m;i++) cin>>middlex[i];
for(int i=1;i<=f;i++) cin>>frontx[i];
//调用快排函数----从小到大
QuickSort(gatex,1,k);
QuickSort(backx,1,d);
QuickSort(middlex,1,m);
QuickSort(frontx,1,f);
//输入
cin>>q;
while(q--){
cin>>a>>b>>c;
//循环遍历守门员,每次选一个
for(int i=k;i>=1;i--){
if(gatex[i]!=0){
sum+=gatex[i];
gatex[i]=0;
break;
}
}
//循环遍历后卫,每次选a个
for(int i=d;i>=1;i--){
if(backx[i]!=0){
sum+=backx[i];
backx[i]=0;
cnt2++;
}
if(cnt2==a){
cnt2=0;
break;
}
}
//循环遍历中锋,每次选b个
for(int i=m;i>=1;i--){
if(middlex[i]!=0){
sum+=middlex[i];
middlex[i]=0;
cnt3++;
}
if(cnt3==b){
cnt3=0;
break;
}
}
//循环遍历前锋,每次选c个
for(int i=f;i>=1;i--){
if(frontx[i]!=0){
sum+=frontx[i];
frontx[i]=0;
cnt4++;
}
if(cnt4==c){
cnt4=0;
break;
}
}
cout<<fixed<<setprecision(2)<<sum*1.0/(1+a+b+c)<<endl;
sum=0;
}
}