dp+路径压缩
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int N=1e6+10;
int n,m,t,s,l,ans=N;
int a[N],d[N],vis[N];
int dp[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>l;
cin>>s>>t>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i];
}
sort(a+1,a+m+1);
for (int i=1;i<=m;i++)
d[i]=(a[i]-a[i-1])%2520;
for (int i=1;i<=m;i++)
{
a[i]=a[i-1]+d[i];
vis[a[i]]=1;
}
l=a[m];
for(int i=0;i<=l+t;i++) dp[i]=m;
dp[0]=0;
for(int i=1;i<=l+t;i++)
{
for(int j=s;j<=t;j++)
{
if(i>=j)
dp[i]=min(dp[i],dp[i-j]);
dp[i]+=vis[i];
}
}
for(int i=l;i<=l+t;i++)
ans=min(ans,dp[i]);
cout<<ans<<endl;
}