#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")