二分QAQ
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
const int MAXN = 200005;
const ll inf = 1e12+7;
ll w[MAXN],v[MAXN];
int lon_[MAXN][2];
ll n,m,s;
ll check(ll W)
{
ll num[n+1];// >=W 的个数
ll sum[n+1];// >=W 的价值和
num[0] = 0;
sum[0] = 0;
for(int i=1;i<=n;i++)
{
sum[i] = sum[i-1];
num[i] = num[i-1];
if(w[i] >= W)
sum[i] += v[i],num[i] += 1;
}
ll now = 0;
for(int i=0;i<m;i++)
{
int x,y;
x = lon_[i][0],y = lon_[i][1];
ll a = num[y]-num[x-1];
ll b = sum[y]-sum[x-1];
now += (a*b);
}
return now;
}
int main()
{
scanf("%lld %lld %lld",&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("%d %d",&lon_[i][0],&lon_[i][1]);
ll le = 0,ri = 1000000;
ll ans = inf;
while(le < ri)
{
ll mid = (le+ri)/2;
ll now = check(mid);
if(now > s)
le = mid+1;
else
ri = mid;
if(abs(now-s) < ans)
ans = abs(now-s);
}
cout<<ans;
return 0;
}