alt 问题描述 小蓝要去健身,他可以在接下来的 1 ∼ 𝑛 1∼n 天中选择一些日子去健身。

他有 𝑚 m 个健身计划,对于第 𝑖 i 个健身计划,需要连续的 2 𝑘 𝑖 2 k i ​

天,如果成功完成,可以获得健身增益 𝑠 𝑖 s i ​ ,如果中断,得不到任何增益。

同一个健身计划可以多次完成,也能多次获得健身增益,但是同一天不能同时进行两个或两个以上的健身计划。

但是他的日程表中有 𝑞 q 天有其他安排,不能去健身,问如何安排健身计划,可以使得 𝑛 n 天的健身增益和最大。

输入格式 第一行输入三个整数 𝑛 , 𝑚 , 𝑞 n,m,q 。

第二行输入 𝑞 q 个整数, 𝑡 1 , 𝑡 2 , 𝑡 3 . . . 𝑡 𝑞 t 1 ​ ,t 2 ​ ,t 3 ​ ...t q ​ ,代表有其他安排的日期。

接下来 m 行,每行输入两个整数 𝑘 𝑖 , 𝑠 𝑖 k i ​ ,s i ​ 。代表该训练计划需要 2 𝑘 𝑖 2 k i ​

天,完成后可以获得 𝑠 𝑖 s i ​ 的健身增益。

输出格式 一个整数,代表最大的健身增益和。

n,m,q=map(int,input().split())
cant_use=list(map(int,input().split()))
vis=[0]*(n+1)

for x in cant_use:
  vis[x]+=1
for i in range(1,n+1):
  vis[i]+=vis[i-1]
sw=[0]*40
for _ in range(m):
  k,s=map(int,input().split())
  sw[k]=max(sw[k],s)
dp=[0]*(n+1)
for i in range(1,n+1):
  dp[i]=dp[i-1]
  for k in range(21):
    l=i-(1<<k)
    if l>=0 and vis[i]-vis[l]==0:
      dp[i]=max(dp[i],dp[l]+sw[k])
    else:
      break
print(dp[n])