#include<stdio.h>
#include<stack>
using namespace std;
stack<int> v;
const int maxn=22;
int a[maxn];
int n,m,k;
int dfs(int i,int sum){
if(i==n) //用了所有数字
return sum==k; //正好相等 返回1,不相等 返回0
else if(sum>k)//超过了,肯定0
return 0;
if(dfs(i+1,sum)) //两种情况 用当前这个数字a[i]
return 1;
if(dfs(i+1,sum+a[i])) //不用这个数
{
v.push(a[i]);
return 1;
}
return 0;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//要求按输入顺序依次输出,所以不能排序
if(dfs(0,0))
{
printf("YES\n");
while(!v.empty())
{
printf("%d ",v.top());
v.pop();
}
printf("\n");
}
else
printf("NO\n");
}
return 0;
}
#include<stack>
using namespace std;
stack<int> v;
const int maxn=22;
int a[maxn];
int n,m,k;
int dfs(int i,int sum){
if(i==n) //用了所有数字
return sum==k; //正好相等 返回1,不相等 返回0
else if(sum>k)//超过了,肯定0
return 0;
if(dfs(i+1,sum)) //两种情况 用当前这个数字a[i]
return 1;
if(dfs(i+1,sum+a[i])) //不用这个数
{
v.push(a[i]);
return 1;
}
return 0;
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
//要求按输入顺序依次输出,所以不能排序
if(dfs(0,0))
{
printf("YES\n");
while(!v.empty())
{
printf("%d ",v.top());
v.pop();
}
printf("\n");
}
else
printf("NO\n");
}
return 0;
}