受不了了
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int N,M,K,a,b,c;
struct NODE{
int num;
int w[110],v[110];
} n[11];
int dp[11][11000];
int main()
{
int i,j,k;
while(scanf("%d%d%d",&N,&M,&K)!=EOF)
{
for(i=1;i<=K;i++) n[i].num=0;
for(i=1;i<=N;i++)
{
scanf("%d%d%d",&a,&b,&c);
n[a].w[++n[a].num]=b;
n[a].v[n[a].num]=c;
}
memset(dp,-1,sizeof(dp));
memset(dp[0],0,sizeof(dp[0]));
for(i=1;i<=K;i++)
for(j=1;j<=n[i].num;j++)
for(k=M;k>=n[i].w[j];k--)
{
if(dp[i][k-n[i].w[j]]!=-1&&dp[i][k]<dp[i][k-n[i].w[j]]+n[i].v[j])
dp[i][k]=dp[i][k-n[i].w[j]]+n[i].v[j];
if(dp[i-1][k-n[i].w[j]]!=-1&&dp[i][k]<dp[i-1][k-n[i].w[j]]+n[i].v[j])
dp[i][k]=dp[i-1][k-n[i].w[j]]+n[i].v[j];
}
if(dp[K][M]<0) puts("Impossible");
else printf("%d\n",dp[K][M]);
}
return 0;
}