program ikeyb;

const
  Infinity = $3FFFFFFF;
  
var
  Num: array [0..90, 0..90] of Integer;
  Keys: string [90];
  Letters: string [90];

procedure Print(K: Integer;
                L: Integer);

var
  I: Integer;
  		
begin
  if K > 1 then
    Print(K - 1, L - Num[K, L]);
  Write(Keys[K], ': ');
  for I := L - Num[K, L] + 1 to L do
    Write(Letters[I]);
  Writeln;
end;

var
  F: array [1..90] of Integer;
  FreqTo: array [0..90] of Integer;
  Cost: array [0..90, 0..90] of Integer;
  I: Integer;
  J: Integer;
  K: Integer;
  L: Integer;
  M: Integer;
  N: Integer;
  SetNum: Integer;
  T: Integer;

begin
  SetNum := 0;
  Read(T);
  while T <> 0 do
  begin
    Dec(T);
    Readln(K, L);
    Readln(Keys);
    Readln(Letters);
    for I := 1 to L do 
      Read(F[I]);
    FreqTo[0] := 0;
    Cost[0, 0] := 0;
    for I := 1 to L do
    begin
      Cost[0, I] := Infinity;
      FreqTo[I] := FreqTo[I - 1] + F[I];
    end;
    for I := 1 to K do
      for J := 0 to L do
      begin
        Cost[I, J] := Infinity;
	N := 0;
	for M := 1 to J do
	begin
	  Inc(N, FreqTo[J] - FreqTo[J - M]);
	  if N + Cost[I - 1, J - M] <= Cost[I, J] then
	  begin
	    Cost[I, J] := N + Cost[I - 1, J - M];
	    Num[I, J] := M;
	  end;
	end;        
      end;
    Inc(SetNum);
    Writeln('Keypad #', SetNum, ':');
    Print(K, L);
    Writeln;
  end;
end.