#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> stones_flag(200000,0);
int main() {
int L,S,T,M;
cin>>L;
cin>>S>>T>>M;
vector<int> stones(M,0);
for(int i=0;i<M;i++){
cin>>stones[i];
}
sort(stones.begin(),stones.end());
//首先计算S==T的情况
if(S==T){
int sum=0;
for(int i=0;i<M;i++){
if(stones[i]%S==0){
sum++;
}
}
cout<<sum;
return 0;
}
//由于L过长,应当压缩空间,便于线性dp
for(int i=0,last=0,offset=0;i<M;i++){
//stones[i]-last表示前后两个石子的距离
if(stones[i]-last>100)
offset+=stones[i]-last-100;
last=stones[i];
stones[i]-=offset;
}
//将压缩空间的石子位置设置为1,告诉此处有石子
for(int i=0;i<M;i++){
stones_flag[stones[i]]=1;
}
int L1=stones[M-1]+10;
vector<int> dp(L1+1,0);
for(int i=1;i<L1+1;i++){
dp[i]=110;
for(int j=S;j<T+1 && i-j>=0;j++){
dp[i]=min(dp[i],dp[i-j]+stones_flag[i]);
}
}
cout<<dp[L1];
return 0;
}
// 64 位输出请用 printf("%lld")