1 #include <cstdio>
2 #include <iostream>
3 #include <cstring>
4 using namespace std;
5 int n,m,k,sum,mx,num,h[110],e[110],c[110],f[110][1<<12];
6 bool check(int x)
7 {
8 memset(f,127,sizeof(f)),f[0][0]=0;
9 for (int i=0;i<=n-1;i++)
10 for (int j=0;j<=(1<<k)-1;j++)
11 {
12 num=0;
13 for (int z=1;z<=k-1;z++) if (j&(1<<z)) num+=e[i-k+z+1];
14 if (num+h[i+1]>=x) f[i+1][j>>1]=min(f[i+1][j>>1],f[i][j]);
15 if (num+h[i+1]+e[i+1]>=x) f[i+1][(j>>1)|(1<<(k-1))]=min(f[i+1][(j>>1)|(1<<(k-1))],f[i][j]+c[i+1]);
16 }
17 for (int i=0;i<=(1<<k)-1;i++) if (f[n][i]<=m) return true;
18 return false;
19 }
20 int main()
21 {
22 freopen("cover.in","r",stdin),freopen("cover.out","w",stdout);
23 scanf("%d%d%d",&n,&m,&k);
24 for (int i=1;i<=n;i++) scanf("%d%d%d",&h[i],&e[i],&c[i]),sum+=e[i],mx=max(mx,h[i]);
25 int l=1,r=sum+mx;
26 while (l<r)
27 {
28 int mid=(l+r)>>1;
29 if (check(mid)) l=mid+1; else r=mid;
30 }
31 printf("%d",l-1);
32 }