代码如下
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct h
{
ll v,w,d;
}a[10001];
struct qh
{
ll x,y,z;
}b[11];
int r()
{
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0'; c=getchar();}
return x*f;
}
ll n,m,c,dp[10001],qu[1001],que[10001];
int main()
{
n=r(),m=r(),c=r();
for(ll i=1;i<=n;++i)
a[i].v=r(),a[i].w=r(),a[i].d=r();
for(ll i=1;i<=n;++i)
for(ll j=0;j<a[i].v;++j)
{
ll h=0,t=0;
for(ll k=0;k*a[i].v+j<=c;++k)
{
ll l=dp[k*a[i].v+j]-k*a[i].w;
if(t>h&&qu[t-1]<l)
--t;
que[t]=k;qu[t++]=l;
if(que[h]+a[i].d<k)
++h;
dp[k*a[i].v+j]=qu[h]+k*a[i].w;
}
}
for(ll i=1;i<=m;++i)
b[i].x=r(),b[i].y=r(),b[i].z=r();
for(ll i=1;i<=m;++i)
for(ll j=c;j>=0;--j)
for(ll k=0;k<=j;++k)
dp[j]=max(dp[j],dp[j-k]+b[i].x*k*k+b[i].y*k+b[i].z);
cout<<dp[c];
}