#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(0);cin.tie(0);
#define ll long long
const int maxn = 2e5+5;
ll n,M;
ll a[maxn];
struct Bit{
ll s;
vector<ll> bit;
Bit(ll n){
s = n;
bit.assign(s+1,0);
}
void add(ll idx, ll val){
while(idx<=s){
bit[idx]+=val;
idx+= idx&(-idx);
}
}
ll get(ll idx){
ll sum = 0;
while(idx>0){
sum+=bit[idx];
idx-=idx&(-idx);
}
return sum;
}
ll query(ll l, ll r){
return get(r) - get(l-1);
}
};
void solve(){
cin >> n >> M;
for(int i = 0;i<n;i++){
cin >> a[i];
}
ll d[n+5];
ll prec = 0;
ll prel = 0;
d[0] = 0;
for(int i = 1;i<=n;i++){
if(a[i-1]%2==0){
prec+=a[i-1];
}
else{
prel+=a[i-1];
}
d[i] = prec - prel;
}
// d[r] - M <= d[l-1] <= d[r];
vector<ll> dl;
for(int i = 0;i<=n;i++){
dl.push_back(d[i]);
dl.push_back(d[i]-M);
}
vector<ll> comp = dl;
sort(comp.begin(),comp.end());
map<ll,int> mp;
int idx = 1;
for(ll i : comp){
if(mp.find(i) == mp.end()){
mp[i] = idx;
idx++;
}
}
Bit bit(comp.size()+1);
int odd = 0;
int even = 0;
int p = 0;
ll ans = 0;
for(int i = 0;i<n;i++){
if(a[i]%2==0){
even = i+1;
}
else{
odd = i+1;
}
int k = min(even,odd);
while(p<=k-1){
bit.add(mp[d[p]],1);
p++;
}
ans+=bit.query(mp[d[i+1]-M], mp[d[i+1]]);
}
cout << ans;
}
int main(){
freopen("CHANLE.INP","r",stdin);
freopen("CHANLE.OUT","w",stdout);
fast;
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmYXN0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTsKI2RlZmluZSBsbCBsb25nIGxvbmcKY29uc3QgaW50IG1heG4gPSAyZTUrNTsKbGwgbixNOwpsbCBhW21heG5dOwpzdHJ1Y3QgQml0ewogICAgbGwgczsKICAgIHZlY3RvcjxsbD4gYml0OwogICAgQml0KGxsIG4pewogICAgICAgIHMgPSBuOwogICAgICAgIGJpdC5hc3NpZ24ocysxLDApOwogICAgfQogICAgdm9pZCBhZGQobGwgaWR4LCBsbCB2YWwpewogICAgICAgIHdoaWxlKGlkeDw9cyl7CiAgICAgICAgICAgIGJpdFtpZHhdKz12YWw7CiAgICAgICAgICAgIGlkeCs9IGlkeCYoLWlkeCk7CiAgICAgICAgfQogICAgfQogICAgbGwgZ2V0KGxsIGlkeCl7CiAgICAgICAgbGwgc3VtID0gMDsKICAgICAgICB3aGlsZShpZHg+MCl7CiAgICAgICAgICAgIHN1bSs9Yml0W2lkeF07CiAgICAgICAgICAgIGlkeC09aWR4JigtaWR4KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN1bTsKICAgIH0KICAgIGxsIHF1ZXJ5KGxsIGwsIGxsIHIpewogICAgICAgIHJldHVybiBnZXQocikgLSBnZXQobC0xKTsKICAgIH0KfTsKCnZvaWQgc29sdmUoKXsKICAgIGNpbiA+PiBuID4+IE07CiAgICBmb3IoaW50IGkgPSAwO2k8bjtpKyspewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgfQogICAgbGwgZFtuKzVdOwogICAgbGwgcHJlYyA9IDA7CiAgICBsbCBwcmVsID0gMDsKICAgIGRbMF0gPSAwOwogICAgZm9yKGludCBpID0gMTtpPD1uO2krKyl7CiAgICAgICAgaWYoYVtpLTFdJTI9PTApewogICAgICAgICAgICBwcmVjKz1hW2ktMV07CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHByZWwrPWFbaS0xXTsKICAgICAgICB9CiAgICAgICAgZFtpXSA9IHByZWMgLSBwcmVsOwogICAgfQogICAgLy8gZFtyXSAtIE0gPD0gZFtsLTFdIDw9IGRbcl07CiAgICB2ZWN0b3I8bGw+IGRsOwogICAgZm9yKGludCBpID0gMDtpPD1uO2krKyl7CiAgICAgICAgZGwucHVzaF9iYWNrKGRbaV0pOwogICAgICAgIGRsLnB1c2hfYmFjayhkW2ldLU0pOwogICAgfQogICAgdmVjdG9yPGxsPiBjb21wID0gZGw7CiAgICBzb3J0KGNvbXAuYmVnaW4oKSxjb21wLmVuZCgpKTsKICAgIG1hcDxsbCxpbnQ+IG1wOwogICAgaW50IGlkeCA9IDE7CiAgICBmb3IobGwgaSA6IGNvbXApewogICAgICAgIGlmKG1wLmZpbmQoaSkgPT0gbXAuZW5kKCkpewogICAgICAgICAgICBtcFtpXSA9IGlkeDsKICAgICAgICAgICAgaWR4Kys7CiAgICAgICAgfQogICAgfQoKICAgIEJpdCBiaXQoY29tcC5zaXplKCkrMSk7CiAgICBpbnQgb2RkID0gMDsKICAgIGludCBldmVuID0gMDsKICAgIGludCBwID0gMDsKICAgIGxsIGFucyA9IDA7CiAgICBmb3IoaW50IGkgPSAwO2k8bjtpKyspewogICAgICAgIGlmKGFbaV0lMj09MCl7CiAgICAgICAgICAgIGV2ZW4gPSBpKzE7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIG9kZCA9IGkrMTsKICAgICAgICB9CiAgICAgICAgaW50IGsgPSBtaW4oZXZlbixvZGQpOwogICAgICAgIHdoaWxlKHA8PWstMSl7CiAgICAgICAgICAgIGJpdC5hZGQobXBbZFtwXV0sMSk7CiAgICAgICAgICAgIHArKzsKICAgICAgICB9CiAgICAgICAgYW5zKz1iaXQucXVlcnkobXBbZFtpKzFdLU1dLCBtcFtkW2krMV1dKTsKICAgIH0KICAgIGNvdXQgPDwgYW5zOwp9CmludCBtYWluKCl7CiAgICBmcmVvcGVuKCJDSEFOTEUuSU5QIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigiQ0hBTkxFLk9VVCIsInciLHN0ZG91dCk7CiAgICBmYXN0OwogICAgc29sdmUoKTsKfQo=