#include<bits/stdc++.h>
using namespace std;
int T,n,x[20],jz,fs,zs,t,v,vt;
double va,vx;
bool flagj,flagi;
struct NODE {
int a,c;
}kp[20];
bool cmp(NODE x,NODE y) {
return x.a>y.a;
}
int main() {
cin>>T;
while(T>0) {
T--;
memset(kp,0,sizeof(kp));
memset(x,0,sizeof(x));
jz=0;
fs=0;
zs=0;
v=0;
va=0;
vx=0;
vt=0;
t=0x3f3f3f3f;
flagj=false;
flagi=false;
cin>>n;
for(int i=1;i<=n;i++) {
cin>>kp[i].c;
}
for(int i=1;i<=n;i++) {
cin>>kp[i].a;
}
for(int i=1;i<=8;i++) {
cin>>x[i];
vt+=x[i];
}
sort(kp+1,kp+1+n,cmp);
for(int i=1;i<=n;i++) {
if(kp[i].c==2) {
if(jz<=1) {
t=min(kp[i].a,t);
v+=kp[i].a;
jz++;
zs++;
}
}
else if(kp[i].c==3) {
if(fs<=3) {
flagj=true;
t=min(t,kp[i].a);
v+=kp[i].a;
fs++;
zs++;
}
}
else {
t=min(t,kp[i].a);
v+=kp[i].a;
zs++;
}
if(zs==8) {
break;
}
}
vx=vt/8;
if(!flagj) {
v-=t;
for(int i=1;i<=n;i++) {
if(kp[i].c==3) {
v+=kp[i].a;
flagi=true;
break;
}
}
}
else {
flagi=true;
}
if(!flagi) {
cout<<"No";
}
else {
va=v/8;
if(va>=vx-2.00) {
cout<<"Yes";
}
else {
cout<<"No";
}
}
if(T!=0) {
cout<<endl;
}
}
return 0;
}