#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
typedef long long ll;
const int N=1000005;
ll a[N],b[N],c[N],n,E;
void compress(){
	vector<ll>s;
	s.reserve(n+1);
	for(int i=0;i<=n;i++)s.push_back(c[i]);
	sort(s.begin(),s.end());
	s.erase(unique(s.begin(),s.end()),s.end());
	for(int i=0;i<=n;i++)c[i]=lower_bound(s.begin(),s.end(),c[i])-s.begin()+1;
}
int sp[20][N];
int MAX(int l,int r){
	if(l>r)return 0;
	int pw=__lg(r-l+1);
	return max(sp[pw][l],sp[pw][r-(1<<pw)+1]);
}
int tree[N+1];
void add(int i,int val){
	for(;i<=N;i+=i&-i)tree[i]+=val;
}
int query(int i){
	int res=0;
	for(;i>=1;i-=i&-i)res+=tree[i];
	return res;
}
int query(int l,int r){
	return query(r)-query(l-1);
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>E;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	for(int i=1;i<=n;i++)c[i]=(b[i]-a[i])+c[i-1];
	compress();
	for(int i=1;i<=n;i++)sp[0][i]=min(a[i],b[i]);
	for(int i=1;(1<<i)<=n;i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			sp[i][j]=max(sp[i-1][j],sp[i-1][j+(1<<(i-1))]);
		}
	}
	ll ans=0;
	for(int l=1,r=1;l<=n;l++){
		while(r<=n&&MAX(l,r)<=E-max(a[r]-b[r],0LL)){
			add(c[r],1);
			E-=max(a[r]-b[r],0LL);
			r++;
		}
		ans+=query(c[l-1],N);
		if(l==r)r++;
		else add(c[l],-1),E+=max(a[l]-b[l],0LL);
	}
	cout<<ans;
	return 0;
}