program p1; var R : array [0..1, 0..100, 0..100] of byte; L : array [1..40] of longint; i,p,k,t,N,M,D,p0,p1 : longint; function max(a,b : longint) : longint; begin if a<b then max:=a else a:=b; end; begin assign (input, 'kass.dat'); reset(input); assign (output, 'kass.out'); rewrite(output); read(N, M, D); for i:=1 to N do read(L[i]); for k:=1 to M do for t:=0 to D do R[0, k, t]:=0; p0:=0; p1:=1; for p:=1 to N do begin for k:=1 to M do for t:=0 to D do if t-L[p]>=0 then R[p1, k, t]:=max(R[p0, k, t-L[p]]+1, R[p0,k,t]) else R[p1, k, t]:=max(R[p1, k-1, D], R[p0,k,t]); p0:=1-p0; p1:=1-p1; end; writeln(max(R[0, M, D], R[1, M, D])); close(input); close(output); end. |