Rt.
code:
#include<iostream>
#include<cstring>
#include<algorithm>
#define re register
#define eps 1e-10
#define int long long
using namespace std;
int lnsz,hd[5000010],n,l,r,arr[20],dis[5000010];
bool inq[5000010];
struct ln{
int u,v,nxt,w;
}a[2000010];
inline void add(int u,int v,int w=0){
a[++lnsz].u=u;
a[lnsz].v=v;
a[lnsz].w=w;
a[lnsz].nxt=hd[u];
hd[u]=lnsz;
}
void dfs_spfa(int t){
inq[t]=true;
for(re int i=hd[t];i;i=a[i].nxt){
if(dis[a[i].v]>dis[t]+(a[i].w)){
if(inq[a[i].v])
return;
dis[a[i].v]=dis[t]+a[i].w;
dfs_spfa(a[i].v);
}
}
inq[t]=false;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
memset(dis,0x3f,sizeof(dis));
dis[0]=0;
cin>>n>>l>>r;
for(re int i=0;i<n;i++)cin>>arr[i];
sort(arr,arr+n);
for(re int i=0;i<arr[0];i++)
for(re int j=1;j<n;j++)
add(i,(i+arr[j])%arr[0],arr[j]);
dfs_spfa(0);
int ans=0;
for(re int i=0;i<arr[0];i++){
if(dis[i]<=r)
ans+=(r-dis[i])/arr[0]+1;
if(dis[i]<l)
ans-=(l-1-dis[i])/arr[0]+1;
}
cout<<ans<<endl;
return 0;
}