//第一次做DFS的题感觉自己是真的菜啊!!!!
//明天开始DFS专项训练!!!
//说下题目要求,就是给你数组从中找出几个数是否使他和为K。。
#include<stdio.h>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
#include<stack>
#include<vector>
#include<string.h>
#include<map>
using
namespace
std
;
int
flag
,
n
,
p
,
a
[
101
],
c
[
1001
],
b
[
1001
],
sum
,
k
;
void
dfs
(
int
t
){
int
i
;
if
(
sum
>
k
)
{
return
;
}
if
(
sum
==
k
)
{
flag
=
1
;
for
(
i
=
0
;
i
<
n
;
i
++
){
if
(
b
[
i
]
==
1
)
{
c
[
p
++
]
=
a
[
i
];
//用C来存储能够为K的数
}
}
}
for
(
i
=
t
;
i
<
n
;
i
++
){
sum
+=
a
[
i
];
b
[
i
]
=
1
;
//标记访问过的地方。
dfs
(
i
+
1
);
sum
-=
a
[
i
];
b
[
i
]
=
0
;
}
}
int
main
()
{
while
((
scanf
(
"%d %d"
,
&
n
,
&
k
)
==
2
)){
flag
=
0
;
p
=
0
;
sum
=
0
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
scanf
(
"%d"
,
&
a
[
i
]);
}
dfs
(
0
);
if
(
flag
==
1
)
{
printf
(
"YES
\n
"
);
for
(
int
i
=
0
;
i
<
p
;
i
++
)
//我居然把i=0给弄丢了,真心累!!!
{
printf
(
"%d "
,
c
[
i
]);
}
printf
(
"
\n
"
);
}
else
{
printf
(
"NO
\n
"
);
}
}
}