#include<bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#define int long long
#define pii pair<int,int>
#define ii int,int
#define fi first
#define se second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define umap unordered_map
#define BIT(mask, i) ((mask >> i)&1)
#define ALL(c) c.begin(), c.end()
using namespace std;
mt19937 rd(chrono::high_resolution_clock::now().time_since_epoch().count());
int rand(int l, int r){
return l + rd()*rd()%(r-l+1);
}
const int N = 2e5+7; // 2*10^5 + 7
const int M = 1e3+3;
const int MOD = 1e9+7;
const int inf = 3e18;
int n, k, a[N], s[N];
void cach1(){ // cách đơn giản nhất
int dem = 0; // đếm số đoạn con có tổng bằng k
for(int l = 1; l <= n; l++){
for(int r = l; r <= n; r++){
long long tong = 0; // lưu tổng của đoạn con từ l->r, 1 <= l <= r <= n
for(int i = l; i <= r; i++){
tong += a[i];
}
if(tong == k){ // thỏa mãn tổng = k
dem = dem + 1;
}
}
}
cout << dem << '\n';
}
void cach2(){
int dem = 0; // đếm số đoạn con có tổng bằng k
for(int i = 1; i <= n; i++){
s[i] = s[i-1] + a[i];
}
for(int l = 1; l <= n; l++){
for(int r = l; r <= n; r++){
long long tong = s[r] - s[l-1];
if(tong == k){ // thỏa mãn tổng = k
dem = dem + 1;
}
}
}
cout << dem << '\n';
}
void cach3(){
for(int i = 1; i <= n; i++){
s[i] = s[i-1] + a[i];
}
// prefix sum
map<long long, long long> mp;
int dem = 0;
mp[0] = 1;
for(int i = 1; i <= n; i++){
dem += mp[s[i] - k]; // đếm số đoạn s[r] - k thỏa mãn s[r] - k == s[l-1]
mp[s[i]]++; // cộng dồn lên vì sau khi tính được s
}
cout << dem;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
cach3();
}