program ss;

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

begin
  repeat
    minn := 40001;
    maxx := -1;
    posmax := 0;
    posmin := 0;
    read(a);
    if (a<>0) then
    begin
      readln(b);
      if (a < 25001) then
        begin
          for i := 1 to a do 
          begin
           read(pole1[i]);
           if pole1[i] > maxx then 
           begin
             maxx := pole1[i];
             posmax := i;
           end;
           if pole1[i] < minn then 
           begin
             minn := pole1[i];
             posmin := i;
           end;
          end; 
        end
      else if (a < 50001) then
        begin
          for i := 1 to 25000 do 
            begin
              read(pole1[i]);
              if pole1[i] > maxx then 
           begin
             maxx := pole1[i];
             posmax := i;
           end;
           if pole1[i] < minn then 
           begin
             minn := pole1[i];
             posmin := i;
           end;
            end;  
          
          for i := 25001 to a do
            begin
             read(pole2[i]);
             if pole2[i] > maxx then 
           begin
             maxx := pole2[i];
             posmax := i;
           end;
           if pole2[i] < minn then 
           begin
             minn := pole2[i];
             posmin := i;
           end;
            end 
        end
        else
          begin
            for i := 1 to 25000 do read(pole1[i]);
            if pole1[i] > maxx then 
           begin
             maxx := pole1[i];
             posmax := i;
           end;
           if pole1[i] < minn then 
           begin
             minn := pole1[i];
             posmin := i;
           end;
            for i := 25001 to 50000 do read(pole2[i]);
            if pole2[i] > maxx then 
           begin
             maxx := pole2[i];
             posmax := i;
           end;
           if pole2[i] < minn then 
           begin
             minn := pole2[i];
             posmin := i;
           end;
            for i := 50001 to a do read(pole3[i]);
            if pole3[i] > maxx then 
           begin
             maxx := pole3[i];
             posmax := i;
           end;
           if pole3[i] < minn then 
           begin
             minn := pole3[i];
             posmin := i;
           end;
          end;
      readln;
      if (posmin < posmax)
      then
      begin
        if posmin< 25001 then
          begin
            pomi:= pole1[posmin];
          end
          else
          if posmin< 50001 then
          begin
            pomi:= pole2[posmin];
          end
          else pomi:= pole3[posmin];
        
        if posmax< 25001 then
          begin
            pomj:= pole1[posmax];
          end
          else
          if posmax< 50001 then
          begin
            pomj:= pole2[posmax];
          end
          else pomj:= pole3[posmax];
        writeln(pomj*(b div pomi)-(b div pomi)*pomi);
      end
      else
      begin
      
      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;    
    end;  
  until (a = 0);
end.