import sys
from typing import List

inputs = []
for line in sys.stdin:
    inputs.extend(map(int, line.split()))

def takeSecond(elem):
    return elem[1]

def max_values(nums: List[int]) -> int:
    max_values = 0
    n, m = nums[0], nums[1]
    a = sorted(nums[2:2 + n])
    bc = sorted([[nums[i], nums[i+1]] for i in range(2 + n, 2 + n + 2 * m, 2)], key=takeSecond, reverse=True)

    for item in bc:
        if not a:
            break

        if item[0] > a[-1]:
            continue

        # 使用二分查找找到合适的位置
        from bisect import bisect_left
        position = bisect_left(a, item[0])
        max_values += item[1]
        a.pop(position)  # 注意:这里会改变数组a的顺序,可以考虑其他方法避免修改a

    return max_values

print(max_values(inputs))




第一步:将m批次客人按照金额降序进行排列

第二步,先安排符合单桌最大人数要求的客人中金额较大批次,不符合直接无法安排,换一批客人

第三步,记录被安排的桌次,直到所有桌次被占满(break执行),或者批次已被安排完成(for循环自己结束)