// Из камней весом P с индексом i (i=1..N) требуется набрать кучу весом ровно W.
// Если это невозможно, набрать максимально близкую к W (но меньшую, чем W).
// Полный перебор при N <= 30.
// Copyleft Alexey Kuzminov (c) 2016

program Stones;

const
  MAX_N = 30;
type
  TIndex = 0..MAX_N-1;
  TStones = array [TIndex] of Integer;

var
  N: Integer;			
  P: TStones;
  i: TIndex;
  W, T, tOld: LongInt;
  V: LongInt;


procedure PrintSolution(const s: String);
var
  k: TIndex;
begin
  Write(s);
  WriteLn;
  // текущий вес
  Write(T:4,': ');
  for k := 0 to N-1 do
    if V shr k and 1 > 0 then
      Write(P[k]:3, ' ');
end;

begin
  // загрузка данных и вывод задачи на консоль
  ReadLn(W);
  ReadLn(N);
  if N > MAX_N then Exit;
  Write('Набрать сумму ', W:4, ' из чисел ');
  for i := 0 to N-1 do begin
    Read(P[i]);
    Write(P[i]:3, ' ');
  end;
  WriteLn;

  tOld:=0;
  for V := 0 to (1 shl N)-1 do begin
    // определение веса набора
    T := 0;
    for i := 0 to N-1 do
      if V shr i and 1 > 0 then
        Inc(T, P[i]);
    
    // все решения - было для отладки
    //PrintSolution('');
    
    // вывод только нужных 
    if T = W then begin
    	if T > tOld then begin
    	  // нашли первое решение
    	  PrintSolution('- мусор'#13'Решения:');
    	  tOld := T;
    	end
    	else
		  PrintSolution('');
    end
    else if T < W then begin
      // может быть решением, если набрать не удастся
      if T > tOld then begin
   	    PrintSolution('- мусор');
        tOld := T;
      end
      else if T = tOld then
        PrintSolution('');
      // случай T < tOld не выводим
    end;
  end;
end.