#include<bits/stdc++.h>
using namespace std;
struct edge{
long long v, w;
};
struct s_to_i{
long long dis,u;
bool operator>(const s_to_i& a)const{
return dis>a.dis;
}
};
int a[13];
priority_queue<s_to_i, vector<s_to_i>, greater<s_to_i> > q;
vector<edge> e[100001];
long long dis[100001], vis[100001];
void dijkstra( int s) {
memset(dis,0x3f3f3f,sizeof(dis));
dis[s]=0;
q.push({0,s});
while(!q.empty()){
long long u=q.top().u;
q.pop();
if(vis[u]) {
continue;
}
vis[u]=1;
for(auto ed:e[u]) {
long long v=ed.v,w=ed.w;
if (dis[v]>dis[u]+w) {
dis[v]=dis[u]+w;
s_to_i disi;
disi.u=v;
disi.dis=dis[u]+w;
q.push(disi);
}
}
}
}
int main(){
long long n,l,r,cnt;
cin>>n>>l>>r;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
int t=a[1];
for(long long i=0;i<t;i++){
for(int j=2;j<=n;j++){
e[i].push_back({a[j],(i+a[j])%t});
}
}
dijkstra(0);
long long ans;
for(int i=0;i<t;i++){
if(r>=dis[i]){
ans+=(r-dis[i])/t+1;
}
if(l>dis[i]){
ans-=(l-1-dis[i])/t+1;
}
}
cout<<ans;
}