#include <bits/stdc++.h>
using namespace std;
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define lo long long
class node{
public:
node* left,*right;
vector<lo>vt;
//int val;
node()
{
left=right=NULL;
}
node(lo x)
{
left=right=NULL;
vt.pb(x);
}
};
lo find(vector<lo>vt,lo k)
{
return lower_bound(vt.begin(),vt.end(),k)-vt.begin();
}
vector<lo> merge(vector<lo>v1,vector<lo>v2)
{
lo i=0,j=0,n=v1.size(),m=v2.size();
vector<lo>ans;
while(i<n and j<m)
{
if(v1[i]<=v2[j]){ans.pb(v1[i]);i++;}
else{ans.pb(v2[j]);j++;}
}
while(i<n){ans.pb(v1[i]);i++;}
while(j<m){ans.pb(v2[j]);j++;}
return ans;
}
node* build(lo l,lo r,lo a[])
{
if(l==r){return new node(a[l]);}
lo mid=l+(r-l)/2;
node* root= new node();
root->left = build(l,mid,a);
root->right = build(mid+1,r,a);
//root->val = min(root->right->val,root->left->val);
root->vt = merge(root->right->vt,root->left->vt);
return root;
}
lo query(node* root,lo l,lo r,lo ll,lo ul,lo k)
{
if(l>r){return 0;}
if(l>ul or r<ll){return 0;}
if(l>=ll and r<=ul){return find(root->vt,k);}
lo mid=l+(r-l)/2;
lo n1=query(root->left,l,mid,ll,ul,k);
lo n2=query(root->right,mid+1,r,ll,ul,k);
return n1+n2;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
lo n,t;
cin>>n>>t;
lo a[n],p[n],prev=0;
for(int i=0;i<n;i++){cin>>a[i];p[i]=a[i]+prev;prev=p[i];}
node* root=build(0,n-1,p);
lo ans=query(root,0,n-1,0,n-1,t);
for(int i=0;i<n;i++)
{
ans+=query(root,0,n-1,i+1,n-1,t+p[i]);
}
cout<<ans<<endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGxvIGxvbmcgbG9uZyAKY2xhc3Mgbm9kZXsKCXB1YmxpYzoKCQlub2RlKiBsZWZ0LCpyaWdodDsKCQl2ZWN0b3I8bG8+dnQ7CgkJLy9pbnQgdmFsOwoJCW5vZGUoKQoJCXsKCQkJbGVmdD1yaWdodD1OVUxMOwoJCX0KCQlub2RlKGxvIHgpCgkJewoJCQlsZWZ0PXJpZ2h0PU5VTEw7CgkJCXZ0LnBiKHgpOwoJCX0KfTsKbG8gZmluZCh2ZWN0b3I8bG8+dnQsbG8gaykKewoJcmV0dXJuIGxvd2VyX2JvdW5kKHZ0LmJlZ2luKCksdnQuZW5kKCksayktdnQuYmVnaW4oKTsKfQp2ZWN0b3I8bG8+IG1lcmdlKHZlY3Rvcjxsbz52MSx2ZWN0b3I8bG8+djIpCnsKCWxvIGk9MCxqPTAsbj12MS5zaXplKCksbT12Mi5zaXplKCk7Cgl2ZWN0b3I8bG8+YW5zOwoJd2hpbGUoaTxuIGFuZCBqPG0pCgl7CgkJaWYodjFbaV08PXYyW2pdKXthbnMucGIodjFbaV0pO2krKzt9CgkJZWxzZXthbnMucGIodjJbal0pO2orKzt9Cgl9Cgl3aGlsZShpPG4pe2Fucy5wYih2MVtpXSk7aSsrO30KCXdoaWxlKGo8bSl7YW5zLnBiKHYyW2pdKTtqKys7fQoJcmV0dXJuIGFuczsKfQpub2RlKiBidWlsZChsbyBsLGxvIHIsbG8gYVtdKQp7CgkKCWlmKGw9PXIpe3JldHVybiBuZXcgbm9kZShhW2xdKTt9CglsbyBtaWQ9bCsoci1sKS8yOwoJbm9kZSogcm9vdD0gbmV3IG5vZGUoKTsKCXJvb3QtPmxlZnQgPSBidWlsZChsLG1pZCxhKTsKCXJvb3QtPnJpZ2h0ID0gYnVpbGQobWlkKzEscixhKTsKCS8vcm9vdC0+dmFsID0gbWluKHJvb3QtPnJpZ2h0LT52YWwscm9vdC0+bGVmdC0+dmFsKTsKCXJvb3QtPnZ0ID0gbWVyZ2Uocm9vdC0+cmlnaHQtPnZ0LHJvb3QtPmxlZnQtPnZ0KTsKCXJldHVybiByb290Owp9CmxvIHF1ZXJ5KG5vZGUqIHJvb3QsbG8gbCxsbyByLGxvIGxsLGxvIHVsLGxvIGspCnsKCWlmKGw+cil7cmV0dXJuIDA7fQoJaWYobD51bCBvciByPGxsKXtyZXR1cm4gMDt9CglpZihsPj1sbCBhbmQgcjw9dWwpe3JldHVybiBmaW5kKHJvb3QtPnZ0LGspO30KCWxvIG1pZD1sKyhyLWwpLzI7CglsbyBuMT1xdWVyeShyb290LT5sZWZ0LGwsbWlkLGxsLHVsLGspOwoJbG8gbjI9cXVlcnkocm9vdC0+cmlnaHQsbWlkKzEscixsbCx1bCxrKTsKCXJldHVybiBuMStuMjsKfQoJCQppbnQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKICAgIGNpbi50aWUoTlVMTCk7IAoJbG8gbix0OwoJY2luPj5uPj50OwoJbG8gYVtuXSxwW25dLHByZXY9MDsKCWZvcihpbnQgaT0wO2k8bjtpKyspe2Npbj4+YVtpXTtwW2ldPWFbaV0rcHJldjtwcmV2PXBbaV07fQoJbm9kZSogcm9vdD1idWlsZCgwLG4tMSxwKTsKCWxvIGFucz1xdWVyeShyb290LDAsbi0xLDAsbi0xLHQpOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQlhbnMrPXF1ZXJ5KHJvb3QsMCxuLTEsaSsxLG4tMSx0K3BbaV0pOwoJfQoJY291dDw8YW5zPDxlbmRsOwoJcmV0dXJuIDA7Cn0=