#include<bits/stdc++.h>
using namespace std;
long long int sum[55];///stores cummulative sum of array
bool isTrue(long long int a,int n,int k)
{
bool isPart[n+1][k+1];
memset(isPart,false,sizeof(isPart));
isPart[0][0]=true;
for(int i=1;i<=k;i++)
for(int j=1;j<=n;j++)
for(int x=0;x<j;x++)
isPart[j][i]=isPart[j][i] | (isPart[x][i-1]&&(((sum[j]-sum[x])&a)==a));
return isPart[n][k];///isPart[n][k] is true of its possible to make a for size n and k parts
}
int main()
{
long long int n;
cin>>n;
long long int arr[n+1];
for(int i=1;i<=n;i++)
cin>>arr[i];
///query
int q;
cin>>q;
while(q--){
///input k
int k;
cin>>k;
long long int toppings[n+1];
for(int i=1;i<=n;i++){
cin>>toppings[i];
}
vector<long long int>v;
for(int i=1;i<=n;i++){
if(toppings[i]*arr[i] > 0){
v.push_back(toppings[i]*arr[i]);
}
}
if(k>v.size()) {
cout<<"0"<<endl;
continue;
}
int n2=v.size();
long long int arr2[n2+1];
for(int i=0;i<v.size();i++){
arr2[i+1]=v[i];
}
sum[0]=arr2[0];
for(int i=1;i<=n2;i++)
sum[i]=sum[i-1]+arr2[i];
long long int ans=0;///maximum possible answers till now
long long int a=1;///intialization
for(int i=61;i>=0;i--)///started from 60 so that numbers tested from highest to lowest because me need maximum answer
if(isTrue(ans|a<<i,n2,k)) /*istrue(x,n,k) function will tell if is it po
possible to divide array of "n" size with "k" parts
such that bitwise and becomes "x" */
ans=ans|(a<<i);
cout<<ans<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbG9uZyBsb25nIGludCBzdW1bNTVdOy8vL3N0b3JlcyBjdW1tdWxhdGl2ZSBzdW0gb2YgYXJyYXkKCmJvb2wgaXNUcnVlKGxvbmcgbG9uZyBpbnQgYSxpbnQgbixpbnQgaykKewogICAgYm9vbCBpc1BhcnRbbisxXVtrKzFdOwogICAgbWVtc2V0KGlzUGFydCxmYWxzZSxzaXplb2YoaXNQYXJ0KSk7CiAgICBpc1BhcnRbMF1bMF09dHJ1ZTsKCiAgICBmb3IoaW50IGk9MTtpPD1rO2krKykKICAgICAgICBmb3IoaW50IGo9MTtqPD1uO2orKykKICAgICAgICAgICAgZm9yKGludCB4PTA7eDxqO3grKykKICAgICAgICAgICAgICAgIGlzUGFydFtqXVtpXT1pc1BhcnRbal1baV0gfCAoaXNQYXJ0W3hdW2ktMV0mJigoKHN1bVtqXS1zdW1beF0pJmEpPT1hKSk7CgogICAgcmV0dXJuIGlzUGFydFtuXVtrXTsvLy9pc1BhcnRbbl1ba10gaXMgdHJ1ZSBvZiBpdHMgcG9zc2libGUgdG8gbWFrZSBhIGZvciBzaXplIG4gYW5kIGsgcGFydHMKfQppbnQgbWFpbigpCnsKICAgIGxvbmcgbG9uZyBpbnQgbjsKICAgIGNpbj4+bjsKCiAgICBsb25nIGxvbmcgaW50IGFycltuKzFdOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICAgICAgY2luPj5hcnJbaV07CgogICAgLy8vcXVlcnkKICAgIGludCBxOwogICAgY2luPj5xOwogICAgd2hpbGUocS0tKXsKCiAgICAvLy9pbnB1dCBrCiAgICBpbnQgazsKICAgIGNpbj4+azsKICAgIGxvbmcgbG9uZyBpbnQgdG9wcGluZ3NbbisxXTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICBjaW4+PnRvcHBpbmdzW2ldOwogICAgfQoKICAgIHZlY3Rvcjxsb25nIGxvbmcgaW50PnY7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKyl7CiAgICAgICAgaWYodG9wcGluZ3NbaV0qYXJyW2ldID4gMCl7CiAgICAgICAgICAgIHYucHVzaF9iYWNrKHRvcHBpbmdzW2ldKmFycltpXSk7CiAgICAgICAgfQogICAgfQogICAgaWYoaz52LnNpemUoKSkgewogICAgICAgIGNvdXQ8PCIwIjw8ZW5kbDsKICAgICAgICBjb250aW51ZTsKICAgIH0KICAgIGludCBuMj12LnNpemUoKTsKICAgCiAgICBsb25nIGxvbmcgaW50IGFycjJbbjIrMV07CiAgICBmb3IoaW50IGk9MDtpPHYuc2l6ZSgpO2krKyl7CiAgICAgICAgYXJyMltpKzFdPXZbaV07CiAgICB9CiAgICBzdW1bMF09YXJyMlswXTsKICAgIGZvcihpbnQgaT0xO2k8PW4yO2krKykKICAgICAgICBzdW1baV09c3VtW2ktMV0rYXJyMltpXTsKICAgIGxvbmcgbG9uZyBpbnQgYW5zPTA7Ly8vbWF4aW11bSBwb3NzaWJsZSBhbnN3ZXJzIHRpbGwgbm93CgogICAgbG9uZyBsb25nIGludCBhPTE7Ly8vaW50aWFsaXphdGlvbgoKICAgIGZvcihpbnQgaT02MTtpPj0wO2ktLSkvLy9zdGFydGVkIGZyb20gNjAgc28gdGhhdCBudW1iZXJzIHRlc3RlZCBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IGJlY2F1c2UgbWUgbmVlZCBtYXhpbXVtIGFuc3dlcgoKICAgICAgICAgICAgaWYoaXNUcnVlKGFuc3xhPDxpLG4yLGspKSAgIC8qaXN0cnVlKHgsbixrKSBmdW5jdGlvbiB3aWxsIHRlbGwgaWYgaXMgaXQgcG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlIHRvIGRpdmlkZSBhcnJheSBvZiAibiIgc2l6ZSB3aXRoICJrIiBwYXJ0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjaCB0aGF0IGJpdHdpc2UgYW5kIGJlY29tZXMgIngiICovCiAgICAgICAgICAgIGFucz1hbnN8KGE8PGkpOwoKICAgIGNvdXQ8PGFuczw8ZW5kbDsKfQoKICAgIHJldHVybiAwOwp9