{$R+} const n_max=101; m_max=101; var b, {вхідні дані} f, {оптимальні результати для різної кількості монет, що залишилися} q: {оптимальні рішення на кожному з кроків прийняття рішення} array[1..n_max,0..m_max] of word; x: array[1..n_max] of word; {оптимальне рішення} o: text; {файлові змінні} i,j,k,l,m,n,p: word; {лічильники} begin assign(o,'profit.in'); reset(o); readln(o,m,n); for i:=1 to n do begin b[i,0]:=0; x[i]:=0 end; for j:=1 to m do for i:=1 to n do read(o,b[i,j]); close(o); for j:=0 to m do begin f[1,j]:=b[1,j]; q[1,j]:=j end; for i:=2 to n do for j:=0 to m do begin p:=0; for k:=0 to j do if (f[i-1,j-k]+b[i,k])>p then begin p:=f[i-1,j-k]+b[i,k]; l:=k; end; f[i,j]:=p; q[i,j]:=l; end; p:=f[n,m]; i:=n; repeat x[i]:=q[i,m]; m:=m-x[i]; dec(i) until m=0; assign(o,'profit.out'); rewrite(o); writeln(o,p); for i:=1 to n-1 do write(o,x[i], ' '); writeln(o,x[n]); close(o); end.