#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; int n; ll x; vector s1; ll a[101]; vector ind1, ind2; ll sum1; ll s2; ll ans1, ans2; bool used2[25]; bool used[25]; void dfs(int i){ if(ans1 || ans2) return; if(i==ind2.size()){ if(x-s2<0 || x-s2>sum1) return; int j=lower_bound(s1.begin(), s1.end(), x-s2)-s1.begin(); if(s1[j]==x-s2){ ans1=s1[j], ans2=s2; for(int j=0; j>n>>x; for(int i=0; i>a[i]; if(a[i]<=10000) ind1.push_back(i), sum1+=a[i]; else ind2.push_back(i); } bool dp[101][1000001]; fill(dp[0], dp[0]+sum1+1, 0); dp[0][0]=1; for(int i=1; i<=ind1.size(); i++){ int i1=ind1[i-1]; for(int j=0; j<=sum1; j++) dp[i][j]=dp[i-1][j]; for(int j=a[i1]; j<=sum1; j++) dp[i][j]|=dp[i-1][j-a[i1]]; } for(int i=0; i<=sum1; i++) if(dp[ind1.size()][i]) s1.push_back(i); dfs(0); if(ans1==0 && ans2==0){ cout<<"No"<