如题,
#include "iostream"
#include "cstdio"
using namespace std;
#define max(a,b) a>b?a:b
int n,m,C;
long long dp[100010];
inline long long read()
{
long long x=0,f=1;char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9')x=(x<<3)+(x<<1)+s-'0',s=getchar();
return x*f;
}
inline void zeronepack(long long x,long long y,long long z){
long long t=1;
while(t<=z) {
long long v=x*t,w=y*t;
for(int i=C;i>=v;i--) dp[i]=max(dp[i],dp[i-v]+w);
z-=t;t*=2;}
if(z){long long v=x*z,w=y*z;for(int i=C;i>=v;i--) dp[i]=max(dp[i],dp[i-v]+w);}
}
inline void completepack(long long x,long long y){for(int i=x;i<=C;i++)dp[i]=max(dp[i],dp[i-x]+y);}
int main()
{
n=read();m=read();C=read();
for(int i=1;i<=n;i++){
long long x=read(),y=read(),z=read();
if(y*z>=C) completepack(x,y);
else zeronepack(x,y,z);
}
for(int i=1;i<=m;i++){
long long x=read(),y=read(),z=read();
for(int j=C;j>=0;j--)
for(int k=0;k<=j;k++)
dp[j]=max(dp[j],dp[j-k]+x*k*k+y*k+z);
}
printf("%lld",dp[C]);
return 0;
}