N,S=map(int,input().split())

nums=list(map(int,input().split()))
nums2=nums[0:int(N/2)]
nums3=nums[int(N/2):int(N+1)]
result=[]
result2=[]
l=0
r=0
count=0

def reculse(count,sum):
    
    if count==len(nums2):
       result.append(sum)
       return 
    
    reculse(count+1,sum)
    reculse(count+1,sum=sum+nums2[count])

def reculse2(count,sum):
    
    if count==len(nums3):
       result2.append(sum)
       return 
    
    reculse2(count+1,sum)
    reculse2(count+1,sum=sum+nums3[count])

reculse(0,0)
reculse2(0,0)

result.sort()
result2.sort()
result.remove(0)
result2.remove(0)

count+=result.count(S)
count+=result2.count(S)

tt=len(result2)

while l<=len(result)-1:

    if result[l]+result2[r]==S:
       count+=1  
       
    if result[l]+result2[r]>S:
        l+=1
        tt=r
        r=0
        
        continue
    r+=1

    if r==tt
       l+=1
       r=0
       continue

print(count)


https://boj.kr/b7d792184c4f4f8ebe2a74dd6bdf8b71


1182랑 똑같은 문제인데


입력수 늘어나서 더 효율적으로 짜야하는 문제임.


할 수 있는 최대한으로 해봤는데, 틀 자체가 문제인걸까 아니면 조금만 보완하면 가능할까? ㅜㅜ


진짜 이것 때문에 미칠 것 같다.


위 코드는 1182에선 통과되긴함