#include <bits/stdc++.h>
using namespace std;
int v[300005];
int segtree[4 * 300005];
map<long long int, int> mp;
void add(int pos, int val, int node, int st, int en) {
  if (st == en) {
    segtree[node] += val;
    return;
  }
  int m = (st + en) / 2;
  if (pos <= m)
    add(pos, val, 2 * node + 1, st, m);
  else
    add(pos, val, 2 * node + 2, m + 1, en);
  segtree[node] = segtree[2 * node + 1] + segtree[2 * node + 2];
}
long long int query(int l, int r, int node, int st, int en) {
  if (l > r) return 0;
  if (l > en || r < st) return 0;
  if (st >= l && en <= r) return segtree[node];
  int m = (st + en) / 2;
  return query(l, r, 2 * node + 1, st, m) +
         query(l, r, 2 * node + 2, m + 1, en);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long int cur = 0, x, t, n, ans = 0, i;
  int cnt = 0;
  cin >> n >> t;
  vector<long long int> st;
  st.push_back(cur);
  for (i = 0; i < n; i++) {
    cin >> v[i];
    cur += v[i];
    st.push_back(cur);
  }
  sort(st.begin(), st.end());
  st.erase(unique(st.begin(), st.end()), st.end());
  for (i = 0; i < (int)st.size(); i++) mp[st[i]] = i;
  add(mp[0], 1, 0, 0, (int)st.size());
  cur = 0;
  for (i = 0; i < n; i++) {
    cur += v[i];
    auto it = upper_bound(st.begin(), st.end(), cur - t);
    if (it == st.end()) {
      add(mp[cur], 1, 0, 0, (int)st.size());
      continue;
    }
    ans += query(mp[*it], (int)st.size(), 0, 0, (int)st.size());
    add(mp[cur], 1, 0, 0, (int)st.size());
  }
  cout << ans << '\n';
}
