/*
怎么说呢,sg函数是一个关键,对于每一堆石子来说
然后再考虑对于很多堆石子来说,很多堆石子在一块就是一个Nim游戏了。
分为三种情况考虑,其实看那张图很关键,sg为0时,只能变到sg非零,
sg非零时,总可以想办法编导sg为0
*/
#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N=110,M=10010;//100个石子堆,最多有一万个石子
int n,m;
int f[M],s[N];//s存储可供选择的集合,f存储的是所有可能出现的石子的个数的sg值
//这个函数返回数量为x的石子的sg值
int sg(int x)
{
//这个f数组真的是记忆化搜索的精髓啊
//如果之前已经算过了,就不用算了,直接返回
if(f[x]!=-1) return f[x];
set<int> S;//set存储当前节点的后边的邻接顶点的sg值
for(int i=0;i<m;i++)//对于可以选择的值,都要尝试一遍
{
int sum=s[i];
if(x>=sum) S.insert(sg(x-sum));//如果相减以后大于0,才把它加入到S中
}
for(int i=0;;i++)//寻找不属于集合S的最小的自然数
if(!S.count(i))
return f[x]=i;
}
int main()
{
cin>>m;
for(int i=0;i<m;i++) scanf("%d",&s[i]);
cin>>n;
memset(f,-1,sizeof f);
int res=0;
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
res^=sg(x);
}
if(res) puts("Yes");
else puts("No");
return 0;
}