python
from itertools import permutations
ipt = [[2,2,1],[2]]
life = ipt[0][0]
danger = ipt[1]
target = ipt[0][1]+1
start = target//3+1
end = target//1
nums = list(range(1,target+1))
resnum = 0
# print(nums)
res = []
def helper(i, tmp_sum, tmp):
if tmp_sum > target or i == len(nums):
return
if tmp_sum == target:
res.append(tmp)
return
helper(i, tmp_sum + nums[i],tmp + [nums[i]])
helper(i+1, tmp_sum ,tmp)
helper(0, 0, [])
for i in res:
temp=[]
for j in permutations(i, len(i)):
if j == temp:
continue
temp = j
if sum(j)==target:
s=0
k=0
for h in j:
s+=h
if s==danger[k] and life>0:
if k<len(danger)-1:
k+=1
else:
break
life-=1
if life>0:
resnum+=1
life = ipt[0][1]
print(resnum)
c++
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e2+10;
typedef long long ll;
int a[maxn];
ll dp[maxn][maxn];//走到i还剩下j滴血的方案;
int main()
{
int n,m,k;scanf("%d %d %d",&m,&n,&k);
for(int i =1;i<=k;++i)
{
int num=0;
scanf("%d",&num);
a[num] = 1;
}//走到n+1位置;
dp[0][m] = 1;
ll res=0;
for(int i =1;i<=n+1;++i)
{
for(int j=1;j<=m;++j)
{
dp[i][j] += dp[i-1][j+a[i] ];
if(i-2>=0)dp[i][j] += dp[i-2][j+a[i] ];
if(i-3>=0)dp[i][j] += dp[i-3][j+a[i] ];//三种走法
if(i==n+1)res+=dp[i][j];
}
}
cout<<res<<endl;
return 0;
}
def _cmp(a, b):
if a[0] < b[0]:
return -1
if a[0] > b[0]:
return 1
if a[0] == b[0]:
return -1 if a[1] < b[1] else 1
if __name__ == '__main__':
import functools
import heapq
m, n = map(int, input().split())
print(m+n)
port = list(map(int, input().split()))
size = list(map(int, input().split()))
time = list(map(int, input().split()))
port = sorted(port)
st = [(size[i], time[i]) for i in range(m)]
st = sorted(st, key=functools.cmp_to_key(_cmp), reverse=True)
pheap = [(0, i) for i in range(n)]
heapq.heapify(pheap)
ans = 0
for i in range(m):
t_q = []
while pheap:
pt, idx = heapq.heappop(pheap)
if port[idx] >= st[i][0]:
heapq.heappush(pheap, (pt+st[i][1], idx))
ans = max(ans, pt+st[i][1])
break
else:
t_q.append((pt, idx))
for item in t_q:
heapq.heappush(pheap, item)
print(ans)