#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //eolibraries #define lnf 3999999999999999999 #define inf 999999999 #define PI 3.14159265359 #define endl "\n" #define fi first #define se second #define pb push_back #define eb emplace_back #define ll long long #define all(c) (c).begin(),(c).end() #define sz(c) (int)(c).size() #define mkp(a,b) make_pair(a,b) #define make_unique(a) sort(all(a)),a.erase(unique(all(a)),a.end()) #define rsz(a,n) a.resize(n) #define pii pair #define rep(i,n) for(int i = 0 ; i < n ; i++) #define drep(i,n) for(int i = n-1 ; i >= 0 ; i--) #define crep(i,x,n) for(int i = x ; i < n ; i++) #define vi vector #define vec(...) vector<__VA_ARGS__> #define rsz(a,n) a.resize(n) #define rszv(a,n,v) a.resize(n,v) #define fcin ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0); //eodefine using namespace std; const int max_n = 103002; int n,k; vi a; vec(set) f(int l,int r) { vec(set) vst,vnest; vst.resize(3,{}); crep(i,l,r) { vnest = vst; for(auto x : vst[0]) { vnest[0].insert(x+a[i]); vnest[2].insert(x-a[i]); } for(auto x : vst[1]) { vnest[1].insert(x+a[i]); vnest[2].insert(a[i]-x); } for(auto x : vst[2]) { vnest[2].insert(a[i]-x); vnest[2].insert(x-a[i]); } vnest[0].insert(a[i]); vnest[1].insert(a[i]); vst = vnest; } return vst; } void yp() { cout<<"Yes\n"; exit(0); } int main(){ fcin; cin>>n>>k; rep(i,n) {int x;cin>>x;a.pb(x); if(x==k) yp(); } vec(set) vsta = f(0,(n+1)/2); vec(set) vstb = f((n+1)/2,n); for(auto x : vstb[2]) { if(vsta[0].find(x+k)!=vsta[0].end() or vsta[0].find(x+k)!=vsta[0].end()) yp(); if(vsta[1].find(x-k)!=vsta[1].end() or vsta[1].find(x-k)!=vsta[1].end()) yp(); if(vsta[2].find(x-k)!=vsta[2].end() or vsta[2].find(k+x)!=vsta[2].end()) yp(); } for(auto x : vstb[1]) { if(vsta[0].find(x+k)!=vsta[0].end()) yp(); if(vsta[2].find(x+k)!=vsta[2].end()) yp(); } for(auto x : vstb[0]) { if(vsta[1].find(x-k)!=vsta[1].end()) yp(); if(vsta[2].find(x-k)!=vsta[2].end()) yp(); } if(vsta[2].find(k)!=vsta[2].end() or vstb[2].find(k)!=vstb[2].end()) yp(); cout<<"No\n"; /* */ return 0; }