1 #include <stdio.h>
2
3 int n,k,pos;
4 int num[25]; // 输入的数据
5 int TTT[25]; // 哪几个数构造的数组
6
7 bool dfs(int i,int sum)
8 {
9 if(i==n)return sum==k;
10 else if(sum>k)return false;
11 //不+情况
12 if(dfs(i+1,sum))return true;
13 //+的情况
14 if(dfs(i+1,num[i]+sum))
15 {
16 TTT[pos++]=num[i];
17 return true;
18 }
19 return false;
20 }
21
22 int main()
23 {
24 while(~scanf("%d%d",&n,&k))
25 {
26 pos=0;
27 for(int i=0;i<n;i++)
28 scanf("%d",&num[i]);
29 if(dfs(0,0))
30 {
31 printf("YES\n");
32 for(int i=pos-1;i>0;i--)
33 printf("%d ",TTT[i]);
34 printf("%d\n",TTT[0]);
35 }
36 else printf("NO\n");
37 }
38 return 0;
39 }