#include <iostream>
#include <algorithm>
using namespace std;
const int N(10009);
int f[N],stone[103];
bool mark[N]={false};
bool comp(const int &x,const int &y)
{
	return x<y;
};
void solve(int l,int s,int t,int m,int &ans)
{
	int p(s*t);
	for(int i=1;i<=m+1;i++)
	{
		int t=stone[i]-stone[i-1];
		if(t>p)
		{
			t-=p;
			for(int j=i;j<=m+1;j++)
				stone[j]-=t;
		}
		mark[stone[i]]=true;
	}
	mark[stone[m+1]]=false;
	f[0]=0;
	for(int i=1;i<=stone[m+1]+t-1;i++)
	{
		f[i]=109;
		for(int j=i-s;j>=0&&j>=i-t;j--)
			f[i]=min(f[i],f[j]);
		if(mark[i])
			f[i]++;
	}
	ans=109;
	for(int i=0;i<t;i++)
		ans=min(ans,f[i+stone[m+1]]);
}
int main()
{
	int l,s,t,m,ans(0);
	cin>>l>>s>>t>>m;
	for(int i=1;i<=m;i++)
		cin>>stone[i];
	stone[m+1]=l;
	sort(stone+1,stone+1+m,comp);
	if(s==t)
	{
		for(int i=1;i<=m;i++)
			if(stone[i]%s==0)
				ans++;
	}
	else
		solve(l,s,t,m,ans);
	cout<<ans<<endl;
	return 0;
}
/**************************************************************
	Problem: 2257
	User: admin
	Language: C++
	Result: Accepted
	Time:42 ms
	Memory:2128 kb
****************************************************************/