#include <iostream>
#include<algorithm>
using namespace std;
int gcd(int a, int b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}

int findGCD(int arr[],int n)
{
    int result = arr[1];
    for (int i = 2; i < n; i++)
    {
        result = gcd(arr[i], result);

        if(result == 1)
        {
           return 1;
        }
    }
    return result;
}
int main()
{
    bool prva,druga,treca;
    int T;
    cin>>T;
    int rez[T];
    int N,M;
    cin>>N>>M;
    for(int k=0;k<T;k++){
    int p[N];
    int o[M];
    for(int i = 0;i<N;i++){
        cin>>p[i];
    }
    for(int i = 0;i<M;i++){
        cin>>o[i];
    }

    prva = false;
    druga = true;
    treca = false;
    sort(p,p+N);
    sort(o,o+M);
    int niz[N];
    for(int i = 1;i<N;i++){
        niz[i] = p[i]-p[0];
    }
    int nzd = findGCD(p,N);
    if(nzd>1)prva=true;
    for(int i= 0;i<M;i++){
        if((o[i]-p[0])%nzd==0){druga = false;break;}
    }
    if(prva==true&&druga==true) treca = true;
    rez[k]=treca;
    }
    for(int i =0;i<T;i++){
        cout<<rez[i]<<endl;
    }
}