#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 ****************************************************************/