/*
这个题目和那个连续线段的sg游戏很像。也是要连续的取值。但是这样堆会增加。
所以则求sg的时候,要考虑各种子情况。
没看懂题目,有点纠结啊
*/
#include <cstdio>
#include <cstring>
int S[3];
int M;
int N;
int sg[1010];
bool used[1010];
int dfs(int n)
{
int& cur = sg[n];
if( cur!=-1 ) return cur;
memset(used,0,sizeof(used));
for(int i=0;i<3;i++)
{
if(n>=S[i])
{
for(int j=0;j<=n-S[i];j++)
{
used[ dfs(j)^dfs(n-S[i]-j) ] =1;
}
}
}
for(int i=0;;i++)
{
if( !used[i])
{
cur = i;
break;
}
}
return cur;
}
int main()
{
while(scanf("%d %d%d",S,S+1,S+2)==3)
{
scanf("%d",&M);
memset(sg,-1,sizeof(sg));
sg[0] = 0;
for(int i=0;i<M;i++)
{
scanf("%d",&N);
if( dfs(N) )
{
printf("1\n");
}
else printf("2\n");
}
}
return 0;
}