#include <bits/stdc++.h>
using namespace std;
const int maxn = 205000;
long long n, m, t, ans, s[maxn];
vector<long long> pb;
struct node {
  int l, r, cnt;
} e[maxn << 2];
void build(int o, int l, int r) {
  e[o].l = l;
  e[o].r = r;
  e[o].cnt = 0;
  if (l == r) return;
  int mid = (e[o].l + e[o].r) >> 1;
  build(o << 1, l, mid);
  build(o << 1 | 1, mid + 1, r);
}
void push_up(int o) { e[o].cnt = e[o << 1].cnt + e[o << 1 | 1].cnt; }
void modify(int o, int l, int r, int v) {
  if (e[o].l == l && e[o].r == r) {
    e[o].cnt += v;
    return;
  }
  int mid = (e[o].l + e[o].r) >> 1;
  if (r <= mid)
    modify(o << 1, l, r, v);
  else if (l > mid)
    modify(o << 1 | 1, l, r, v);
  else
    modify(o << 1, l, mid, v), modify(o << 1 | 1, mid + 1, r, v);
  push_up(o);
}
long long query(int o, int l, int r) {
  if (r < l) return 0;
  if (e[o].l == l && e[o].r == r) {
    return e[o].cnt;
  }
  int mid = (e[o].l + e[o].r) >> 1;
  if (r <= mid)
    return query(o << 1, l, r);
  else if (l > mid)
    return query(o << 1 | 1, l, r);
  else
    return query(o << 1, l, mid) + query(o << 1 | 1, mid + 1, r);
}
int find(long long x) {
  return (lower_bound(pb.begin(), pb.end(), x) - pb.begin()) + 1;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> t;
  for (int i = 1; i <= n; i++) {
    cin >> s[i];
    s[i] += s[i - 1];
    pb.push_back(t + s[i]);
  }
  pb.push_back(t);
  sort(pb.begin(), pb.end());
  pb.erase(unique(pb.begin(), pb.end()), pb.end());
  m = pb.size();
  build(1, 1, m);
  modify(1, find(t), find(t), 1);
  for (int i = 1; i <= n; i++) {
    int k = find(s[i]);
    if (pb[k - 1] == s[i]) k++;
    ans += query(1, k, m);
    k = find(s[i] + t);
    modify(1, k, k, 1);
  }
  cout << ans << endl;
  return 0;
}
