# 贪心算法
# 维护一个最小堆,每次pop()出最小的,然后把它的两倍加入堆中

import sys
import heapq
# 获取数据
n, target = list(map(int, sys.stdin.readline().split(" ")))
consumption = list(map(int, sys.stdin.readline().split(" ")))
    
def max_days(k, a):
    # 初始化最小堆,存储每个口罩当前的不舒适度
    heap = a.copy()
    heapq.heapify(heap)
    
    total_discomfort = 0
    days = 0
    
    while heap:
        # 获取当前不舒适度最小的口罩
        discomfort = heapq.heappop(heap)
        
        # 检查是否可以使用这个口罩
        if total_discomfort + discomfort > k:
            break
        
        # 使用这个口罩
        total_discomfort += discomfort
        days += 1
        
        # 将该口罩的下次使用不舒适度放回堆中
        heapq.heappush(heap, discomfort * 2)
    
    return days

print(max_days(target, consumption))
    


第一反应是一个0-1背包问题的变种,但发现不好算出需要添加的元素,但找元素的过程就是贪心+每个基本元素的最大堆,所以发现想复杂了换了个思路