l:array[0..11]of longint;
f:array[0..11,0..10001]of longint;
x,b,c,d,n,m,i,j,k,t:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
begin
readln(n,m,t);
for i:=1 to n do begin
readln(b,c,d);
inc(l[b]);
a[b,l[b]]:=c;
w[b,l[b]]:=d;
end;
for i:=0 to t do
for j:=0 to m do f[i,j]:=-99999999;
f[0,0]:=0;
for i:=1 to t do
for j:=1 to l[i] do
for k:=m downto a[i,j] do
f[i,k]:=max(max(f[i,k],f[i-1,k-a[i,j]]+w[i,j]),f[i,k-a[i,j]]+w[i,j]);
for i:=1 to m do x:=max(x,f[t,i]);
if x=0 then writeln('Impossible') else writeln(x);
end.
var a,w:array[0..11,0..100]of longint; //就是着
l:array[0..11]of longint;
f:array[0..11,0..10001]of longint;
x,b,c,d,n,m,i,j,k,t:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
begin
readln(n,m,t);
for i:=1 to n do begin
readln(b,c,d);
inc(l[b]);
a[b,l[b]]:=c;
w[b,l[b]]:=d;
end;
for i:=0 to t do
for j:=0 to m do f[i,j]:=-99999999;
f[0,0]:=0;
for i:=1 to t do
for j:=1 to l[i] do
for k:=m downto a[i,j] do
f[i,k]:=max(max(f[i,k],f[i-1,k-a[i,j]]+w[i,j]),f[i,k-a[i,j]]+w[i,j]);
for i:=1 to m do x:=max(x,f[t,i]);
if x=0 then writeln('Impossible') else writeln(x);
end.