program pasto_zenklai;
  { 103 u‘davinys }

  const MAX_N = 30; { maksimalus skirting— pažto ‘enkl— ver‡i— skai‡ius }
        MAX_M = 30; { maksimalus ‘enkl— kiekis rinkinyje }
  type vertes = array [1..MAX_N] of integer;
       zenklai = array [0..maxint] of byte;

  function didziausia (n, m: integer; verte: vertes): integer;
    var z: zenklai;
        i, j: integer;
  begin
    for i := 0 to maxint do
      z[i] := MAX_M + 1;   { dar nesudar‚me nei vieno ‘enkl— rinkinio }
    i := 0;
    z[0] := 0;
    while z[i] <= m do { jei dar neviržijome ‘enkl— limito }
      begin
        for j := 1 to n do
          if i + verte[j] <= maxint
             then if z[i + verte[j]] > z[i] + 1
                     then z[i + verte[j]] := z[i] + 1;
        i := i + 1;
      end;
    didziausia := i - 1;
  end; { didziausia }

  const prad = 'ZENKLAI.DAT';   { pradini— duomen— failas }
        rez  = 'ZENKLAI.REZ';   { rezultat— failas }
  var f: text;
      n, m, i: integer;
      verte: vertes;
begin
  assign (f, prad);
  reset (f);
  readln (f, n, m);
  for i := 1 to n do
    read (f, verte[i]);
  close (f);

  assign (f, rez);
  rewrite (f);
  writeln (f, didziausia (n, m, verte));
  close (f);
end.

