Listing CAMPING.PAS 
Program Camping; 
const MaxN=365; MaxK=100; MaxM=14; 
var k,m,n:Integer; 
solicit:array [1..MaxN] of Integer; 
{ numarul solicitarilor incepand } 
{ cu ziua solicit[i] } 
rezolvare:Integer; 
cas_libera:array [1..MaxK] of Integer; 
Function Liber(i:Integer):Integer; 
var j:Integer; 
begin 
j:=1; 
while (j<=k) and (cas_libera[j]>i) 
do Inc(j); 
Liber:=j 
{ j este prima casuta libera incepand } 
{ cu cea de a i-a zi } 
end; 
Procedure Citire; 
var fi:Text; 
i,x:Integer; 
begin 
Assign(fi,'CAMP.IN'); 
Reset(fi); 
Readln(fi,k); Readln(fi,m); Readln(fi,n); 
for i:=1 to MaxN do solicit[i]:=0; 
for i:=1 to N do 
begin 
Readln(fi,x); 
Inc(solicit[x]) 
end; 
Close(fi) 
end; 
Procedure Scrie_rezultate; 
var fo:Text; 
begin 
Assign(fo,'CAMP.OUT'); Rewrite(fo); 
Writeln(fo,rezolvare); 
Close(fo) 
end; 
Procedure Calculeaza; 
var i,j:Integer; 
begin 
rezolvare:=0; 
for i:=1 to MaxN do 
begin 
while solicit[i]>0 do 
begin 
j:=Liber(i); 
if j<=K 
then 
begin 
Inc(rezolvare); 
Dec(solicit[i]); 
cas_libera[j]:=i+m 
end 
else Break 
end 
end 
end; 
Begin 
Citire; 
Calculeaza; 
Scrie_rezultate 
End.