program ss;

var a,b,i,j, pomi, pomj, max, poc, nakup: longint;
    pole1: array [1..25000] of longint;
    pole2: array [25001..50000] of longint;
    pole3: array [50001..70000] of longint;

begin
  repeat
    read(a);
    if (a<>0) then
    begin
      readln(b);
      if (a < 25001) then
        begin
          for i := 1 to a do 
          begin
           read(pole1[i]);
          end; 
        end
      else if (a < 50001) then
        begin
          for i := 1 to 25000 do read(pole1[i]);
          for i := 25001 to a do read(pole2[i]);
        end
        else
          begin
            for i := 1 to 25000 do read(pole1[i]);
            for i := 25001 to 50000 do read(pole2[i]);
            for i := 50001 to a do read(pole3[i]);
          end;
      readln;
      max := 0;
      for i:= 1 to a-1 do
        begin
          if i< 25001 then
          begin
            pomi:= pole1[i];
          end
          else
          if i< 50001 then
          begin
            pomi:= pole2[i];
          end
          else pomi:= pole3[i];
          
          if b >= pomi then
          begin
          poc := b div pomi;
          nakup := poc * pomi;
          for j:= i+1 to a do
            begin
              if j< 25001 then
          begin
            pomj:= pole1[j];
          end
          else
          if j< 50001 then
          begin
            pomj:= pole2[j];
          end
          else pomj:= pole3[j];
              if max < (poc * pomj)-nakup 
                then max := (poc * pomj)-nakup;
            end;
          end;     
        end;
        writeln(max);
    end;  
  until (a = 0);
end.