int a[300005],b[300005],c[300005],d[300005],w[300005];int n;structnode{int l,r,w;booloperator<(const node&t)const{return l < t.l;}}nod[300005];int ans =-1;int mx[300005];voidwork(){sort(nod+1,nod+1+n);mem(mx,0);for(int i = n;i;i--) mx[i]=max(mx[i],nod[i].w);forr(i,1,n){int p =upper_bound(nod+1,nod+1+n,node{nod[i].r,-1,-1})- nod;if(p != n+1) ans =max(ans,nod[i].w + mx[p]);}}voidsolve(){
ans =-1;
cin>>n;forr(i,1,n) cin>>a[i]>>b[i]>>c[i]>>d[i];forr(i,1,n) cin>>w[i];forr(i,1,n){
nod[i]={a[i],c[i],w[i]};}work();forr(i,1,n) nod[i]={b[i],d[i],w[i]};work();
cout << ans << endl;}signedmain(){int t;cin>>t;while(t--)solve();return0;}