//Top down dp
#include<bits/stdc++.h>
using namespace std;
#define mx 1000
int dp[50][mx+10] ,arr[mx+10];
int solve(int N,int sum)
{
if(dp[N][sum]!=-1) return dp[N][sum];
if(sum==0) return 1; //Base Case
if(N==0 && sum!=0) return 0; //Failure Base Case
else if(sum-arr[N]<0) return dp[N][sum] = solve(N-1, sum);
else return dp[N][sum] = solve(N-1,sum) || solve(N-1,sum-arr[N]) ;
}
int main()
{
int N , sum;
cin>>N>>sum;
for(int i=1;i<=N;i++) cin>>arr[i];
memset(dp,-1,sizeof(dp));
if(solve(N,sum)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}
Ly9Ub3AgZG93biBkcAoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgbXggMTAwMAoKaW50IGRwWzUwXVtteCsxMF0gLGFycltteCsxMF07CgppbnQgc29sdmUoaW50IE4saW50IHN1bSkKewogICAgaWYoZHBbTl1bc3VtXSE9LTEpICAgICAgcmV0dXJuIGRwW05dW3N1bV07CiAgICBpZihzdW09PTApICAgICAgICAgICAgICByZXR1cm4gMTsgIC8vQmFzZSBDYXNlCiAgICBpZihOPT0wICYmIHN1bSE9MCkgICAgICByZXR1cm4gMDsgIC8vRmFpbHVyZSBCYXNlIENhc2UKICAgIGVsc2UgaWYoc3VtLWFycltOXTwwKSAgIHJldHVybiBkcFtOXVtzdW1dID0gc29sdmUoTi0xLCBzdW0pOwogICAgZWxzZSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRwW05dW3N1bV0gPSBzb2x2ZShOLTEsc3VtKSB8fCBzb2x2ZShOLTEsc3VtLWFycltOXSkgOwp9CgoKaW50IG1haW4oKQp7CgogICAgaW50IE4gLCBzdW07CiAgICBjaW4+Pk4+PnN1bTsKICAgIGZvcihpbnQgaT0xO2k8PU47aSsrKSBjaW4+PmFycltpXTsKICAgIG1lbXNldChkcCwtMSxzaXplb2YoZHApKTsKICAgIGlmKHNvbHZlKE4sc3VtKSkgY291dDw8IllFUyI8PGVuZGw7CiAgICBlbHNlICAgICAgICAgICAgIGNvdXQ8PCJOTyI8PGVuZGw7CiAgICByZXR1cm4gMDsKfQ==