#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int t,n,m,a[maxn],p[maxn],init,killget[maxn];
int X,Y,g,a_,b_,mx;
multiset<int>s;
void exgcd(int a,int b){
if(!b){X=1,Y=0,g=a;return;}
exgcd(b,a%b);
int T=X;
X=Y;Y=T-(a/b)*X;
}
int mul(int A,int B,int mod){
int res=0,flg=1;
if(A<0&&B>0)flg=-1;
if(A>0&&B<0)flg=-1;
A=abs(A),B=abs(B);
while(B){
if(B&1)res=(res+A)%mod;
B>>=1;
A=A*2%mod;
}return (res%mod+mod)%mod*flg;
}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int lcm(int a,int b){return a/gcd(a,b)*b;}
int main(){
cin>>t;
E:while(t--){
a_=1,b_=0;mx=0;s.clear();
cin>>n>>m;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i)cin>>p[i];
for(int i=1;i<=n;++i)cin>>killget[i];
for(int i=1;i<=m;++i)cin>>init,s.insert(init);
for(int i=1;i<=n;++i){
auto it=s.upper_bound(a[i]);
if(it!=s.begin())it--;
int k=*it;s.erase(it);s.insert(killget[i]);
mx=max(mx,(a[i]-1)/k+1);
k%=p[i],a[i]%=p[i];
if(!k&&a[i]){cout<<-1<<"\n";goto E;}
if(!k&&!a[i])continue;
exgcd(k,p[i]);
if(a[i]%g){cout<<-1<<"\n";goto E;}
p[i]=p[i]/g;
a[i]=mul(a[i]/g,X,p[i]);
exgcd(a_,p[i]);
if((a[i]-b_)%g){puts("-1");goto E;}
int t0=mul(X,(a[i]-b_)/g,(p[i]/g)),m=lcm(a_,p[i]);
b_=(mul(t0,a_,m)+b_)%m;
a_=m;
cout<<"a_b_"<<a_<<" "<<b_<<"\n";
}
cout<<(b_>=mx?b_:b_+(mx-b_-1)/a_+1)*a_<<'\n';
}
return 0;
}