Code: c++
#include <bits/stdc++.h> #define N 1005 #define M 2000 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int A[N],B[N],w[M+3],f[M+3]; int main() { // setIO("input"); int n,m,k,i,j,ans=0; scanf("%d%d%d",&n,&m,&k); for(i=0;i<=k;++i) scanf("%d",&w[i]); for(i=1;i<=m;++i) scanf("%d%d",&A[i],&B[i]); memset(f,-1,sizeof(f)); f[0]=0; for(i=1;i<=n;++i) { for(j=M;j>=0;--j) { if(f[j]==-1) continue; for(int tmp=1;tmp<=m;++tmp) { if(j>=A[tmp]) f[j-A[tmp]]=max(f[j-A[tmp]], f[j]+B[tmp]); } } if(i!=n) { for(j=M;j>=0;--j) { if(f[j]==-1) continue; f[j+w[j]]=max(f[j+w[j]], f[j]); } } } for(j=0;j<=M;++j) { if(f[j]==-1) continue; ans=max(ans, f[j]+w[j]+j); } printf("%d\n",ans); return 0; }