%E6%98%AF%E7%A1%AE%E5%AE%9A%E7%9A%84%2C%E9%97%AE%E4%BD%A0%E6%9C%80%E5%B0%91%E7%BB%8F%E8%BF%87%E5%87%A0%E4%B8%AA%E7%9F%B3%E5%A4%B4%E5%88%B0%E8%BE%BE%E6%B2%B3%E5%AF%B9%E5%B2%B8%3F%7D&preview=true)
#include <bits/stdc++.h>
using namespace std;
const int N=105;
int f[N];//从0跳到当前石头最少需要几次.
int pos[N];
int main()
{
int l;scanf("%d",&l);
int s,t,n;scanf("%d%d%d",&s,&t,&n);f[0]=0;pos[0]=0;
for(int i=1;i<=n;i++) scanf("%d",&pos[i]);sort(pos+1,pos+1+n);
for(int i=1;i<=n;i++)
{
int L=max(pos[i]-t,0);int R=max(pos[i]-s,0);
for(int j=0;j<i;j++)
{
//if(i==2&&j==0) cout<<L<<' '<<R<<endl;
if(pos[j]>=L&&pos[j]<=R) f[i]=min(f[i],f[j]+1);
}
}int ans=1e9;//cout<<f[4]<<' '<<pos[4]<<endl;
for(int i=1;i<=n;i++)
{
if(pos[i]+t>=l) ans=min(ans,f[i]);
}printf("%d\n",ans);
return 0;
}