rt.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5, M = 1e5 + 5, logM = 34;
int n, L, R, _id, rt; ll a[N+5], ans;
struct node {
int ls, rs, val;
} d[N*logM];
int NewNode () { return d[++_id] = {0,0,0}, _id; }
void Update (int &p, int x, int y, ll l=-1e10, ll r=1e10) {
if (!p) p = NewNode();
if (l == r) return void(d[p].val += y);
int mid = l+r>>1;
if (x <= mid) Update(d[p].ls, x, y, l, mid);
if (x > mid) Update(d[p].rs, x, y, mid+1, r);
d[p].val = d[d[p].ls].val + d[d[p].rs].val;
}
int Query (int &p, ll s, ll t, ll l=-1e10, ll r=1e10) {
if (!p) return 0;
if (s <= l && r <= t) return d[p].val;
int mid = l+r>>1, res = 0;
if (s <= mid) res += Query(d[p].ls, s, t, l, mid);
if (t > mid) res += Query(d[p].rs, s, t, mid+1, r);
return res;
}
int main () {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n >> L >> R;
for (int i = 1; i <= n; i++) cin >> a[i], a[i] += a[i-1];
Update(rt, a[0], 1);
for (int i = 1; i <= n; i++) {
ans += Query(rt, a[i]-R, a[i]-L);
Update(rt, a[i], 1);
}
cout << ans;
return 0;
}