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";
}