#include<bits/stdc++.h>
#define int __int128
using namespace std;
int read(){
int res=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
while(isdigit(ch)){res=res*10+ch-'0';ch=getchar();}
return res*f;
}
void write(int x){
if(x<0){putchar('-'),x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
multiset<int>s;
int T;
int n,m;
int maxn;
int a[100100],p[100100],d[100100],b,t[100100];
int x,y;
void exgcd(int a,int b,int c,int &g){
if(b==0){
x=c/a,y=1;
g=a;
return ;
}
exgcd(b,a%b,c,g);
int lx=x,ly=y;
x=ly,y=lx-a/b*ly;
}
int gcd(int x,int y){
if(y==0)return x;
return gcd(y,x%y);
}
int lcm(int x,int y){
return x/gcd(x,y)*y;
}
int excrt(){
int ans=0,mod=1;
for(int i=1;i<=n;i++){
int A=t[i]*mod,B=p[i],C=a[i]-ans*t[i];
int g;
exgcd(A,B,C,g);
if(C%g!=0)return -1;
int tmp=B/g;
x=(x%tmp+tmp)%tmp;
int tm=mod;
mod=lcm(mod,p[i]);
ans=(ans%mod+tm%mod*x%mod)%mod;
ans=(ans%mod+mod)%mod;
}
if(ans<maxn)ans=ans+((maxn-ans-1)/mod+1)*mod;
return ans;
}
signed main(){
T=read();
while(T--){
s.clear();
n=read(),m=read();
maxn=-INT_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++)d[i]=read();
for(int i=1;i<=m;i++){
b=read();
s.insert(b);
}
for(int i=1;i<=n;i++){
multiset<int>::iterator it=s.upper_bound(a[i]);
if(it!=s.begin())it--;
t[i]=*it,s.erase(it),s.insert(d[i]);
maxn=max(maxn,(a[i]-1)/t[i]+1);
}
write(excrt());
printf("\n");
}
return 0;
}