也不清楚是哪里出了问题,调了好久
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,l,r,a,b,ans,f[9000001],vis[9000001];
ll cnt,nxt[9000001],head[1000001],to[9000001],val[9000001];
queue<ll>q;
void add(ll x,ll y,ll v){
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
val[cnt]=v;
}
int main(){
scanf("%lld%lld%lld%lld",&n,&l,&r,&a);l--;
for(ll j=1;j<n;j++){
scanf("%lld",&b);
for(ll i=0;i<a;i++)
add(i,(i+b)%a,b),f[i]=1e18;
}
f[0]=0;
q.push(0);
while(!q.empty()){
ll x=q.front();q.pop();
vis[x]=0;
for(ll i=head[x];i;i=nxt[i]){
ll v=to[i],w=f[x]+val[i];
if(w<f[v]){f[v]=w;if(!vis[v]) vis[v]=1,q.push(v);}
}
}
for(ll i=0;i<a;i++){
if(r>=f[i]) ans+=(r-f[i])/a+1;
if(l>=f[i]) ans-=(l-f[i])/a+1;
}
printf("%lld",ans);
}