# 堆叠问题
# 先按血量降序排序,然后按攻击力降序排序,相同血量按攻击力升序排序,这样就只用计算攻击力的最长降序子序列了
import sys
import bisect

def solve():
    n, H, A = map(int, input().split())
    data = sys.stdin.read().split('\n')
    h_list = list(map(int, data[0].split()))
    a_list = list(map(int, data[1].split()))

    # 获取初始就能击败的怪物列表并排序
    monster_list = [(h, a) for h, a in zip(h_list, a_list) if h <= H and a <= A]
    monster_list.sort(key=lambda x: (-x[0], x[1]))
    
    # 计算最长递减子序列长度(通过取-,计算LIS实现)
    sorted_a_list = [-attack for _, attack in monster_list]
    tail = []
    for i in sorted_a_list:
        index = bisect.bisect_left(tail, i)
        # 是最大值,拓展序列
        if index == len(tail):
            tail.append(i)
        # 不是,进行序列优化
        else:
            tail[index] = i
    
    print(len(tail))

if __name__ == '__main__':
    solve()


前几天有个书的堆叠问题来着,一眼看上去以为是0-1(你这什么邪道rpg,打完怪居然是直接继承怪的血攻),然后看到需要状态转移且二维数据都小于前一个数据,马上就想到了