n=R() nums=[RR() for _ inrange(n)] b=[x[-1] for x in nums] # 前缀和 pre=get_pre(b)
# 动态规划 f=[[inf]*1010for _ inrange(n)]
# 预处理 for p inrange(1010): if p<=nums[-1][0]: f[-1][p]=p+nums[-1][1] else: f[-1][p]=max(0,p-nums[-1][2]) # 递推 for i inrange(n-2,-1,-1): for p inrange(1010): if p<=nums[i][0]: f[i][p]=f[i+1][p+nums[i][1]] else: f[i][p]=f[i+1][max(0,p-nums[i][2])]
for _ inrange(R()): x=R() idx=0 # 大于,查找什么时候会小于等于1000 if x>1000: idx=bisect_left(pre,x-1000) # 太大了会一直减小,直接特判求解 if idx>=n: print(x-pre[-1]) continue x-=pre[idx] ans=f[idx][x] print(ans)