1
+ #!usr/bin/env python3
2
+ from collections import defaultdict , deque , Counter , OrderedDict
3
+ from bisect import bisect_left , bisect_right
4
+ from functools import reduce , lru_cache
5
+ from heapq import heappush , heappop , heapify
6
+
7
+ from itertools import *
8
+ import math , fractions
9
+ import sys , copy
10
+
11
+ def L (): return sys .stdin .readline ().split ()
12
+ def I (): return int (sys .stdin .readline ().rstrip ())
13
+ def SL (): return list (sys .stdin .readline ().rstrip ())
14
+ def LI (): return [int (x ) for x in sys .stdin .readline ().split ()]
15
+ def LI1 (): return [int (x ) - 1 for x in sys .stdin .readline ().split ()]
16
+ def LS (): return [list (x ) for x in sys .stdin .readline ().split ()]
17
+ def R (n ): return [sys .stdin .readline ().strip () for _ in range (n )]
18
+ def LR (n ): return [L () for _ in range (n )]
19
+ def IR (n ): return [I () for _ in range (n )]
20
+ def LIR (n ): return [LI () for _ in range (n )]
21
+ def LIR1 (n ): return [LI1 () for _ in range (n )]
22
+ def SLR (n ): return [SL () for _ in range (n )]
23
+ def LSR (n ): return [LS () for _ in range (n )]
24
+
25
+ def perm (n , r ): return math .factorial (n ) // math .factorial (r )
26
+ def comb (n , r ): return math .factorial (n ) // (math .factorial (r ) * math .factorial (n - r ))
27
+ def powerset (iterable ):
28
+ s = list (iterable )
29
+ return chain .from_iterable (combinations (s , r ) for r in range (len (s )+ 1 ))
30
+
31
+ def make_list (n , * args , default = 0 ): return [make_list (* args , default = default ) for _ in range (n )] if args else [default for _ in range (n )]
32
+
33
+ dire = [[1 , 0 ], [0 , 1 ], [- 1 , 0 ], [0 , - 1 ]]
34
+ dire8 = [[1 , 0 ], [1 , 1 ], [0 , 1 ], [- 1 , 1 ], [- 1 , 0 ], [- 1 , - 1 ], [0 , - 1 ], [1 , - 1 ]]
35
+ alphabets = "abcdefghijklmnopqrstuvwxyz"
36
+ ALPHABETS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
37
+ MOD = 1000000007
38
+ INF = float ("inf" )
39
+
40
+ sys .setrecursionlimit (1000000 )
41
+
42
+ def main ():
43
+ N , X = LI ()
44
+ W = IR (N )
45
+
46
+ first , second = W [:N // 2 ], W [N // 2 :]
47
+ d = defaultdict (int )
48
+
49
+ for s in powerset (first ):
50
+ d [sum (s )] += 1
51
+
52
+ ans = 0
53
+ for s in powerset (second ):
54
+ ans += d [X - sum (s )]
55
+ print (ans )
56
+
57
+
58
+ if __name__ == '__main__' :
59
+ main ()
0 commit comments