var
  f:text;
  ms:array[0..101]of byte;
  km:array[1..10]of byte;
  i,i1,j,a,k,m,sd:byte;
  n,s:longint;
{}
function check:boolean;
var
  i:byte;
  b:boolean;
begin
  b:=true;
  for i:=1 to k do
    b:=b and(ms[i+j]+km[i]<3);
  check:=b;
end;
{}
function size:byte;
var
  i:byte;
  s:byte;
begin
  s:=0;
  i:=1;
  while ms[i]<>0 do
  begin
    inc(i);
    s:=s+1;
  end;
  size:=s;
end;
{}
begin
  for i:=0 to 9 do km[i]:=0;
  for i:=0 to 100 do ms[i]:=0;

  assign(f,'b.in');
  reset(f);
  readln(f,n,m,k);
  readln(f,j);
  if j=k then
  begin
    assign(f,'b.out');
    rewrite(f);
    write(f,k*n);
    close(f);
    exit;
  end;

  for i:=1 to j do
  begin
    read(f,a);
    km[a]:=1;
  end;
  close(f);

  s:=0;

  for a:=1 to n div m do
  begin
    for i:=1 to m do
    begin
      for j:=0 to k*(m-1) do
        if check then break;
      for i1:=1 to k do
        if ms[i1+j]<>2 then
        ms[i1+j]:=1+km[i1];
    end;

    sd:=size-k;
    for j:=1 to k*(m-1) do
      ms[j]:=ms[j+sd];
    for j:=k*(m-1)+1 to k*m do
      ms[j]:=0;
    s:=s+sd;
  end;

  for i:=1 to n mod m do
    begin
      for j:=0 to k*(m-1) do
        if check then break;
      for a:=1 to k do
      if ms[a+j]<>2 then
        ms[a+j]:=1+km[a];
    end;

  s:=s+size;

  assign(f,'b.out');
  rewrite(f);
  write(f,s);
  close(f);

end.
