sort(b+1,b+1+tot);
tot=unique(b+1,b+1+tot)-b-1;//去重
for(int i=1;i<=tot;i++){
mp[b[i]]=i;
}
tot=unique(b+1,b+1+tot)-b-1;
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int M=2e5+7;
int n,x,tot;
int a[M];
LL pre[M];
LL b[M<<1];
map<LL,int> mp;
struct Tree{
int l,r;
LL sum;
}t[M<<3];
void pushup(int rt){
t[rt].sum=t[rt<<1].sum+t[rt<<1|1].sum;
}
void build(int rt,int l,int r){
t[rt].l=l; t[rt].r=r;
if(l==r){
t[rt].sum=0;
return;
}
int mid=(l+r)>>1;
build(rt<<1,l,mid);
build(rt<<1|1,mid+1,r);
pushup(rt);
}
void add(int rt,int pos,int num){
if(t[rt].l==pos&&t[rt].r==pos){
t[rt].sum+=num;
return;
}
int mid=(t[rt].l+t[rt].r)>>1;
if(pos<=mid)
add(rt<<1,pos,num);
else
add(rt<<1|1,pos,num);
pushup(rt);
}
LL ask(int rt,int l,int r){
if(t[rt].l==l &&r==t[rt].r){
return t[rt].sum;
}
int mid=(t[rt].l+t[rt].r)>>1;
if(r<=mid)
return ask(rt<<1,l,r);
else if(l>mid)
return ask(rt<<1|1,l,r);
else
return ask(rt<<1,l,mid)+ask(rt<<1|1,mid+1,r);
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>x;
b[++tot]=0;
for(int i=1;i<=n;i++){
cin>>a[i];
pre[i]=pre[i-1]+a[i];
b[++tot]=pre[i]-x; b[++tot]=pre[i];
}
sort(b+1,b+1+tot);
tot=unique(b+1,b+1+tot)-b-1;
for(int i=1;i<=tot;i++){
mp[b[i]]=i;
}
build(1,1,tot);
add(1,mp[0],1);
LL anq=0;
for(int i=1;i<=n;i++){
anq+=ask(1,1,mp[pre[i]-x]);
add(1,mp[pre[i]],1);
}
cout<<anq<<"\n";
}