using namespace std;
int t,n,m,c;ll a[N],b[N],sa[N],sb[N],f[N];
inline db w(int j,int i){
int p=upper_bound(sb+1,sb+m+2,sa[i]-sa[j])-sb-1;
return f[j]+p+1.0*(sa[i]-sa[j]-sb[p])/(sb[p+1]-sb[p]);
}
int q[N<<1],hh,tt,lt[N],rt[N];
signed main(){
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&c);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]),sa[i]=sa[i-1]+a[i];
for(int i=1;i<=m;i++)scanf("%lld",&b[i]),sb[i]=sb[i-1]+b[i];
sb[m+1]=1e18;q[hh=tt=1]=0,lt[0]=1,rt[0]=n;
for(int i=1;i<=n;i++){
while(hh<=tt&&rt[q[hh]]<i)hh++;
f[i]=floor(w(q[hh],i))-c;
while(hh<=tt&&w(q[tt],lt[q[tt]])<w(i,lt[q[tt]]))tt--;
if(hh>tt)lt[i]=i+1,rt[i]=n,q[++tt]=i;
else if(w(q[tt],rt[q[tt]])>=w(i,rt[q[tt]])){if(rt[q[tt]]<n)lt[i]=rt[q[tt]]+1,rt[i]=n,q[++tt]=i;}
else{
int l=lt[q[tt]],r=rt[q[tt]];
while(l<r){
int mid=(l+r+1)>>1;
if(w(q[tt],mid)>=w(i,mid))l=mid;
else r=mid-1;
}
rt[q[tt]]=l,lt[i]=l+1,rt[i]=n,q[++tt]=i;
}
}
printf("%lld\n",f[n]);
}
return 0;
}