#include<bits/stdc++.h>
using namespace std;
#define int __int128
#define N 100100
int T,n,m,a[N],p[N],f[N],s,k1,k2,minx;
bool flag;
struct exCRT{
int f,a,b;
}ec[N];
multiset<int>st;
void exgcd(int a,int& x,int b,int& y,int c){
if(b==0){
x=c/a,y=0;
return;
}
exgcd(b,y,a%b,x,c);
y-=a/b*x;
}
int lcm(int x,int y){
return x/__gcd(x,y)*y;
}
int iabs(int x){
return x<0?-x:x;
}
int read(){
int k=1,ans=0;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')k=-1;s=getchar();}
while(s>='0'&&s<='9'){ans=ans*10+s-'0';s=getchar();}
return k*ans;
}
void write(int x){
if(x<0)putchar('-'),x=-x;
int sta[40],t=0;
do{sta[t++]=x%10,x/=10;}while(x);
while(t)putchar(sta[--t]+'0');
}
signed main(){
freopen("P4774_3.in","r",stdin);
T=read();
while(T--){
n=read(),m=read(),st.clear();flag=0,minx=LLONG_MIN;
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=n;i++)p[i]=read();
for(int i=1;i<=n;i++)f[i]=read();
while(m--){
s=read();
st.insert(s);
}
for(int i=1;i<=n;i++){
set<int>::iterator t=st.upper_bound(a[i]);
if(t!=st.begin())--t;
ec[i]={*t,p[i],a[i]%p[i]};
minx=max(minx,(a[i]-1)/ *t+1);
st.erase(*t);st.insert(f[i]);
}
for(int i=2;i<=n;i++){
int f2=ec[i].f,f1=ec[i-1].f,a1=ec[i-1].b,a2=ec[i].b,p1=ec[i-1].a,p2=ec[i].a;
if(iabs(f1*a2-f2*a1)%__gcd(iabs(f2*p1),iabs(f1*p2))){
flag=1;
break;
}
exgcd(f2*p1,k1,-f1*p2,k2,f1*a2-f2*a1);
s=lcm(p1,p2);
int x=(a1+k1*p1)%s;
ec[i]={f1,s,(x+s)%s};
}
if(flag)puts("-1");
else{
int a=ec[n].b;
if(a>=minx){
write(a);
puts("");
}else{
int d=lcm(ec[n].f,ec[n].a);
int k=(minx-a-1)/d+1;
write(a+k*d);
puts("");
}
}
}
return 0;
}