注意前缀和 下标从1开始取
#include<iostream>
using namespace std;
#include<algorithm>
#define ll long long
int n,m;
ll s;
ll sum_1[200005];
ll sum_v[200005];
ll w[200005];
ll v[200005];
ll lll[200005];
ll rr[200005];
ll get(int W)
{
sum_1[0]=0;
sum_v[0]=0;
for(int i=1;i<=n;i++) //前缀和
{
if(w[i]>=W)
{
sum_1[i]=sum_1[i-1]+1;
sum_v[i]=sum_v[i-1]+v[i];
}else{
sum_1[i]=sum_1[i-1];
sum_v[i]=sum_v[i-1];
}
}
ll altol=0;
for(int i=0;i<m;i++)
{
altol+=((sum_1[rr[i]]-sum_1[lll[i]-1])*(sum_v[rr[i]]-sum_v[lll[i]-1]));
}
return altol;
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&w[i],&v[i]);
}
for(int i=0;i<m;i++)
{
scanf("%lld%lld",&lll[i],&rr[i]);
}
int l=1;
int r=1e6+1;
int mid;
while(l<r)
{
mid=l+(r-l)/2;
ll ans=get(mid);
if(ans==s)
return mid;
else if(ans>s)
l=mid+1;
else r=mid-1;
}
// cout<<s<<endl;
// cout<<get(l-1)<<" "<<get(l)<<" "<<get(l+1)<<endl;
//
ll oo=min(abs(get(l)-s),abs(get(l-1)-s));
oo=min(oo,abs(get(l+1)-s));
printf("%lld",oo);
return 0;
}