#include <iostream>
#include <cstdio>
#include <deque>
#include <algorithm>
#define inf 0x0f0f0f0f
using namespace std;
long long int l;
int s, t, m;
int main()
{
cin >> l;
cin >> s >> t >> m;
long long int stoneidx[m+2], nsi[m+1];
stoneidx[0]=0, nsi[0]=0;
for (int i=1; i<=m; i++)
{
cin >> stoneidx[i];
}
stoneidx[m+1]=l;
sort(stoneidx+1, stoneidx+m+1);
for (int i=1; i<=m+1; i++)
{
if (stoneidx[i]-stoneidx[i-1]>s+t)
{
l=l-stoneidx[i]+stoneidx[i-1]+s+t;
nsi[i]=nsi[i-1]+s+t;
}
else if (i!=m+1)
{
nsi[i]=stoneidx[i]-stoneidx[i-1]+nsi[i-1];
}
}
int brd[l+t]={0};
for (int i=1; i<=m; i++) brd[nsi[i]]=1;
deque<int> dq;
int cur=0;
for (int i=1; i<l; i++)
{
while (!dq.empty()&&dq.front()<i-t) dq.pop_front();
while (cur<=i-s)
{
while (!dq.empty()&&brd[dq.back()]>brd[cur]) dq.pop_back();
dq.push_back(cur++);
}
if (!dq.empty()) brd[i]+=brd[dq.front()];
else brd[i]=inf;
}
int ans=inf;
for (int i=l; i<l+t; i++)
{
while (!dq.empty()&&dq.front()<i-t) dq.pop_front();
while (cur<l)
{
while (!dq.empty()&&brd[dq.back()]>brd[cur]) dq.pop_back();
dq.push_back(cur++);
}
if (!dq.empty()) brd[i]+=brd[dq.front()];
else brd[i]=inf;
ans=min(ans, brd[i]);
}
printf("%d", ans);
return 0;
}