#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e5;
const int maxn = (int)5e5;
const long long INF = (long long)1e17;
long long n, S, a[N + 5], sum[N + 5], BIT1[maxn + 5], BIT2[maxn + 5], ans;
vector<long long>coor;
void update1(int x, int val){
for(; x > 0; x -= x & -x) BIT1[x] += val;
}
void update2(int x, int val){
for(; x <= maxn; x += x & -x) BIT2[x] += val;
}
long long get1(int x){
long long s = 0;
for(; x <= maxn; x += x & -x) s += BIT1[x];
return s;
}
long long get2(int x){
long long s = 0;
for(; x > 0; x -= x & -x) s += BIT2[x];
return s;
}
void nhap(){
cin >> n >> S;
for(int i = 1; i <= n; i++) cin >> a[i];
}
void prepare(){
coor.push_back(-INF);
for(int i = 0; i <= n; i++){
if(i != 0) sum[i] = sum[i - 1] + a[i];
coor.push_back(sum[i]);
coor.push_back(sum[i] - S);
coor.push_back(sum[i] + S);
}
sort(coor.begin(), coor.end());
}
void solve(){
int tmp;
for(int R = 0; R <= n; R++){
tmp = lower_bound(coor.begin(), coor.end(), S + sum[R]) - coor.begin();
ans += get1(tmp);
tmp = lower_bound(coor.begin(), coor.end(), sum[R] - S) - coor.begin();
ans += get2(tmp);
tmp = lower_bound(coor.begin(), coor.end(), sum[R]) - coor.begin();
update1(tmp - 1, 1);
update2(tmp + 1, 1);
}
cout << ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
nhap();
prepare();
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAoaW50KTFlNTsKY29uc3QgaW50IG1heG4gPSAoaW50KTVlNTsKY29uc3QgbG9uZyBsb25nIElORiA9IChsb25nIGxvbmcpMWUxNzsKCmxvbmcgbG9uZyBuLCBTLCBhW04gKyA1XSwgc3VtW04gKyA1XSwgQklUMVttYXhuICsgNV0sIEJJVDJbbWF4biArIDVdLCBhbnM7CnZlY3Rvcjxsb25nIGxvbmc+Y29vcjsKCnZvaWQgdXBkYXRlMShpbnQgeCwgaW50IHZhbCl7Cglmb3IoOyB4ID4gMDsgeCAtPSB4ICYgLXgpIEJJVDFbeF0gKz0gdmFsOwp9CnZvaWQgdXBkYXRlMihpbnQgeCwgaW50IHZhbCl7Cglmb3IoOyB4IDw9IG1heG47IHggKz0geCAmIC14KSBCSVQyW3hdICs9IHZhbDsKfQpsb25nIGxvbmcgZ2V0MShpbnQgeCl7Cglsb25nIGxvbmcgcyA9IDA7Cglmb3IoOyB4IDw9IG1heG47IHggKz0geCAmIC14KSBzICs9IEJJVDFbeF07CglyZXR1cm4gczsKfQpsb25nIGxvbmcgZ2V0MihpbnQgeCl7Cglsb25nIGxvbmcgcyA9IDA7Cglmb3IoOyB4ID4gMDsgeCAtPSB4ICYgLXgpIHMgKz0gQklUMlt4XTsKCXJldHVybiBzOwp9CnZvaWQgbmhhcCgpewoJY2luID4+IG4gPj4gUzsKCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXTsKfQp2b2lkIHByZXBhcmUoKXsKCWNvb3IucHVzaF9iYWNrKC1JTkYpOwoJZm9yKGludCBpID0gMDsgaSA8PSBuOyBpKyspewoJCWlmKGkgIT0gMCkgc3VtW2ldID0gc3VtW2kgLSAxXSArIGFbaV07CgkJY29vci5wdXNoX2JhY2soc3VtW2ldKTsKCQljb29yLnB1c2hfYmFjayhzdW1baV0gLSBTKTsKCQljb29yLnB1c2hfYmFjayhzdW1baV0gKyBTKTsKCX0KCXNvcnQoY29vci5iZWdpbigpLCBjb29yLmVuZCgpKTsKfQp2b2lkIHNvbHZlKCl7CglpbnQgdG1wOwoJZm9yKGludCBSID0gMDsgUiA8PSBuOyBSKyspewoJCXRtcCA9IGxvd2VyX2JvdW5kKGNvb3IuYmVnaW4oKSwgY29vci5lbmQoKSwgUyArIHN1bVtSXSkgLSBjb29yLmJlZ2luKCk7CgkJYW5zICs9IGdldDEodG1wKTsKCQl0bXAgPSBsb3dlcl9ib3VuZChjb29yLmJlZ2luKCksIGNvb3IuZW5kKCksIHN1bVtSXSAtIFMpIC0gY29vci5iZWdpbigpOwoJCWFucyArPSBnZXQyKHRtcCk7CgkJdG1wID0gbG93ZXJfYm91bmQoY29vci5iZWdpbigpLCBjb29yLmVuZCgpLCBzdW1bUl0pIC0gY29vci5iZWdpbigpOwoJCXVwZGF0ZTEodG1wIC0gMSwgMSk7CgkJdXBkYXRlMih0bXAgKyAxLCAxKTsKCX0KCWNvdXQgPDwgYW5zOwp9CmludCBtYWluKCkgewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCWNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJbmhhcCgpOwoJcHJlcGFyZSgpOwoJc29sdmUoKTsKCXJldHVybiAwOwp9