uses math;
var a,d:array[0..100]of longint;
b,c:array[1..1000000]of longint;
k,min1,x,e,s,t,i,j,m,n,l:longint;
procedure f(h1,t1:longint);
var o,x:longint;
begin
if h1<t1 then
begin
i:=h1; j:=t1;
x:=a[(i+j) shr 1];
while i<=j do
begin
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
o:=a[i];
a[i]:=a[j];
a[j]:=o;
inc(i);
dec(j);
end;
end;
f(h1,j); f(i,t1);
end;
end;
begin
read(l);
read(s,t,m);
min1:=0;
for i:=1 to m do
begin read(a[i]); end;
if s=t then
begin
for i:=1 to m do
if a[i] mod s =0 then inc(min1);
write(min1); halt;
end;
f(1,m); a[m+1]:=l; a[0]:=0; d:=a;
for i:=1 to m+1 do
begin
if d[i]-d[i-1]>500 then a[i]:=a[i-1]+500
else
a[i]:=a[i-1]+d[i]-d[i-1];
end;
for i:=1 to m do
inc(b[a[i]]);
l:=a[m+1];
for i:=s to l do
begin
c[i]:=c[i]+b[i];
x:=maxlongint;
for k:=s to t do
if i-k>=s then
x:=min(c[i-k],x);
if x=maxlongint then x:=0; inc(c[i],x);
end;
min1:=maxlongint;
for i:=l-t to l do
min1:=min(c[i],min1);
write(min1);
end.
var a,d:array[0..100]of longint;
b,c:array[1..1000000]of longint;
k,min1,x,e,s,t,i,j,m,n,l:longint;
procedure f(h1,t1:longint);
var o,x:longint;
begin
if h1<t1 then
begin
i:=h1; j:=t1;
x:=a[(i+j) shr 1];
while i<=j do
begin
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
o:=a[i];
a[i]:=a[j];
a[j]:=o;
inc(i);
dec(j);
end;
end;
f(h1,j); f(i,t1);
end;
end;
begin
read(l);
read(s,t,m);
min1:=0;
for i:=1 to m do
begin read(a[i]); end;
if s=t then
begin
for i:=1 to m do
if a[i] mod s =0 then inc(min1);
write(min1); halt;
end;
f(1,m); a[m+1]:=l; a[0]:=0; d:=a;
for i:=1 to m+1 do
begin
if d[i]-d[i-1]>500 then a[i]:=a[i-1]+500
else
a[i]:=a[i-1]+d[i]-d[i-1];
end;
for i:=1 to m do
inc(b[a[i]]);
l:=a[m+1];
for i:=s to l do
begin
c[i]:=c[i]+b[i];
x:=maxlongint;
for k:=s to t do
if i-k>=s then
x:=min(c[i-k],x);
if x=maxlongint then x:=0; inc(c[i],x);
end;
min1:=maxlongint;
for i:=l-t to l do
min1:=min(c[i],min1);
write(min1);
end.