#include<bits/stdc++.h>
using namespace std;

char gc() {
	return getchar();
}

template<typename T>
int read(T &ans) {
	ans=0;T f=1;
	char ch=gc();
	while(!isdigit(ch)) {
		if(ch==EOF) return EOF;
		if(ch=='-') f=-1;
		ch=gc();
	}
	while(isdigit(ch))
		ans=ans*10+ch-'0',ch=gc();
	ans*=f;
	return 1;
}

template<typename T1,typename T2>
int read(T1 &a,T2 &b) {
	return read(a)!=EOF&&read(b)!=EOF?2:EOF;
}

template<typename T1,typename T2,typename T3>
int read(T1 &a,T2 &b,T3 &c) {
	return read(a,b)!=EOF&&read(c)!=EOF?3:EOF;
}

typedef long long ll;
const int Maxn=11000000;
const ll inf=0x3f3f3f3f3f3f3fll;

ll tl[Maxn],tr[Maxn],tn[Maxn];
ll ans,a[Maxn],n,k;
int cnt,ls[Maxn],rs[Maxn];

int newnode(ll l,ll r) {
	int root=++cnt;
	tl[root]=l,tr[root]=r;
	return root;
}

void add(int root,ll x) {
	ll l=tl[root],r=tr[root],mid=(l+r)/2ll;
	tn[root]++;
	if(l==r) return;
	if(x<=mid) {
		if(!ls[root]) ls[root]=newnode(l,mid);
		add(ls[root],x);
	}
	else {
		if(!rs[root]) rs[root]=newnode(mid+1,r);
		add(rs[root],x);
	}
}

ll query(int root,ll ql,ll qr) {
	if(!root) return 0;
	ll l=tl[root],r=tr[root],mid=l+r>>1;
	if(ql<=l&&qr>=r) return tn[root];
	ll ans=0;
	if(ql<=mid) ans=query(ls[root],ql,qr);
	if(qr>mid) ans+=query(rs[root],ql,qr);
	return ans;
}

int main() {
//	freopen("test.in","r",stdin);
	read(n,k);
	for(int i=1;i<=n;i++) {
		read(a[i]);
		a[i]-=k;
	}
	for(int i=2;i<=n;i++) a[i]+=a[i-1];
	newnode(0,2*inf);
	for(int i=0;i<=n;i++) {
		ans+=query(1,0,a[i]+inf);
		add(1,a[i]+inf);
	}
	printf("%lld\n",ans);
	return 0;
}
