#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;
//英语 看博友分析 抄博友程序 涉小数二分 没掌握
struct nod{
long long b,h,w,d;
long long dw;
long long hdw;
};
int n;
long long v;
nod da[50008];
bool cmp(nod x,nod y)
{
return x.b<y.b;
}
bool check(double mid)
{
double sum=0;
for(int i=0;i<n;i++)
{
if(mid>=da[i].b)
{
if(mid>(da[i].b+da[i].h))
{
sum=sum+da[i].hdw;
}else
{
sum=sum+(mid-da[i].b)*da[i].dw;
}
}else
{
break;
}
}
return sum<(double)v;
}
int main()
{
int T;
cin>>T;
while(T--)
{
//cin>>n;
scanf("%d",&n);
double l=10000000000;
double r=-1;
long long sum=0;
for(int i=0;i<n;i++)
{
//cin>>da[i].b>>da[i].h>>da[i].w>>da[i].d;
scanf("%lld%lld%lld%lld",&da[i].b,&da[i].h,&da[i].w,&da[i].d);
da[i].dw=da[i].w*da[i].d;
da[i].hdw=da[i].h*da[i].dw;
l=min(l,(double)da[i].b);
r=max(r,(double)(da[i].b+da[i].h));
sum=sum+da[i].h*da[i].w*da[i].d;
}
scanf("%lld",&v);
if(v>sum)
{
cout<<"OVERFLOW"<<endl;
continue;
}
sort(da,da+n,cmp);
double mid;
while((r-l)>0.0001)
{
mid=(r+l)/2;
if(check(mid))
{
l=mid;
}else
{
r=mid;
}
}
cout<<fixed<<setprecision(2)<<mid<<endl;
}
return 0;
}