#include <iostream>
#include <cstdio>
#include <cstring>
#include <climits>
using namespace std;
int w[200005], v[200005], l1[200005], r1[200005];
long long s, diff, min_diff=LONG_LONG_MAX, prefix[200005], prefix_v[200005], n, m;
inline int read() {
int x=0; char ch=getchar();
while(ch<'0' || ch>'9') ch=getchar();
while(ch>='0' && ch<='9')
x = (x<<3) + (x<<1) + ch-48, ch=getchar();
return x;
}
bool check(int mid) {
memset(prefix, 0, sizeof(prefix)),
memset(prefix_v, 0, sizeof(prefix_v));
long long ans=0;
for(int i=1; i<=n; ++i)
prefix[i] = prefix[i-1] + (w[i] >= mid),
prefix_v[i] = prefix_v[i-1] + (w[i] >= mid)*v[i];
for(int i=1; i<=m; ++i)
ans += (prefix[r1[i]] - prefix[l1[i]-1]) * (prefix_v[r1[i]] - prefix_v[l1[i]-1]);
diff = ans>s ? ans-s : s-ans; return ans<s;
}
int main() {
n=read(), m=read(), cin >> s;
int l=0, r=-1, mid;
for(int i=1; i<=n; ++i)
w[i] = read(), v[i] = read(),
r = r<w[i] ? w[i] : r;
for(int i=1; i<=m; ++i)
l1[i] = read(), r1[i] = read();
r+=2;
while(l<r) {
mid = (l+r) >> 1;
if(check(mid)) r=mid-1; else l=mid+1;
min_diff = diff<min_diff ? diff : min_diff;
}
cout << min_diff;
return 0;
}