#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 2e5 + 50;
int n,m;
ll k,all_ans = LONG_MIN;
struct node {
int w,v;
} a[maxn];
struct question {
int l,r;
} q[maxn];
bool check(int w){
printf("hash\n");
ll sw[maxn],sv[maxn],ans = 0;
memset(sw,0,sizeof(sw));
memset(sv,0,sizeof(sv));
for (int i = 1; i <= n; i++) {
printf("hash\n");
if (a[i].w >= w) sw[i] = sw[i - 1] + 1,sv[i] = sv[i - 1] + a[i].v;
else sw[i] = sw[i - 1],sv[i] = sv[i - 1];
}
for (int i = 1; i <= m; i++) ans += (sw[q[i].r] - sw[q[i].l - 1]) * (sw[q[i].r] - sw[q[i].l - 1]) * (sv[q[i].r] - sv[q[i].l - 1]);
if (abs(ans - k) < abs(all_ans - k)) all_ans = ans;
if (ans > k) return true;
else return false;
}
int main(){
scanf("%d%d%lld",&n,&m,&k);
for (int i = 1; i <= n; i++) scanf("%d%d",&a[i].w,&a[i].v);
for (int i = 1; i <= m; i++) scanf("%d%d",&q[i].l,&q[i].r);
int l = 0,r = 1000001,mid;
while (l + 1 < r) {
printf("%d %d\n",l,r);
mid = (l + r) / 2;
printf("hash\n");
if (check(mid)) l = mid;
else r = mid;
}
printf("%lld",abs(all_ans - k));
return 0;
}