#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#define ll long long
using namespace std;
const int Maxx=1010;
int n,k,a[Maxx],x[Maxx],max_x=0;
int grundy[Maxx];
void slove()
{
grundy[0]=0;
for(int j=1;j<=max_x;j++)//对于数量为j的堆
{
set <int> s;
for(int i=0;i<k;i++)
if(a[i]<=j) s.insert(grundy[j-a[i]]);
//递归求出所有它可以转移到的状态
int g=0;
while(s.count(g)!=0) g++;
grundy[j]=g;//除了可以转移到的状态的Grundy值以外的最小非负整数
}
int ans=0;
for(int i=0;i<n;i++) ans^=grundy[x[i]];
if(ans!=0) printf("Alice\n");
else printf("Bob\n");
}
int main()
{
cin>>n>>k;
for(int i=0;i<k;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
cin>>x[i];
if(x[i]>max_x) max_x=x[i];
}
slove();
return 0;
}