#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);~i;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
//Data
const int N=5e5,M=12;
int m,a[M],n;
ll al,ar;
//Graph
vector<int> e[N],to,we;
void adde(int u,int v,int w){
e[u].pb(sz(to)),to.pb(v),we.pb(w);
}
ll dis[N]; bool vis[N];
priority_queue<pair<ll,int>> q;
void dijkstra(int s){
R(u,n) dis[u]=linf,vis[u]=false;
q.push(mp(-(dis[s]=0),s));
while(sz(q)){
int u=q.top().y; q.pop();
if(vis[u]) continue; vis[u]=true;
for(int v:e[u])if(dis[to[v]]>dis[u]+we[v])
q.push(mp(-(dis[to[v]]=dis[u]+we[v]),to[v]));
}
}
//Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>m>>al>>ar,--al;
R(i,m) cin>>a[i];
sort(a,a+m),n=a[0];
R(i,m)if(i)R(u,n)
adde(u,(u+a[i])%n,a[i]);
dijkstra(0);
ll ns=0;
R(u,n){
if(al>=dis[u]) ns-=(al-dis[u])/n+1;
if(ar>=dis[u]) ns+=(ar-dis[u])/n+1;
}
cout<<ns<<'\n';
return 0;
}