using namespace std;
using ll = long long;
int n, m;
ll s,ans = 0x3f3f3f3f3f3f3f3;
struct kuanshi {
ll w, v;
kuanshi() {};
kuanshi(ll a,ll b):w(a),v(b){}
};
struct interval {
int l, r;
interval() {}
interval(int a,int b):l(a),r(b){}
};
vector<kuanshi>vec(200009, kuanshi());
vector<interval>inter(200009, interval());
ll prefix1[200009];
ll prefix2[200009];
bool isValid(int mid) {
memset(prefix1, 0, sizeof(prefix1));
memset(prefix2, 0, sizeof(prefix2));
for (int i = 1; i <= n; i++) {
if (vec[i].w >= mid) {
prefix1[i] = prefix1[i - 1] + 1;
prefix2[i] = prefix2[i - 1] + vec[i].v;
}
else {
prefix1[i] = prefix1[i - 1];
prefix2[i] = prefix2[i - 1];
}
}
int l, r; ll sum = 0;
for (int i = 1; i <= m; i++) {
l = inter[i].l, r = inter[i].r;
sum += (prefix1[r] - prefix1[l - 1]) * (prefix2[r] - prefix2[l - 1]);
}
ans = min(ans, abs(sum - s));
if (sum > mid) {
return false;
}
return true;
}
void solve() {
cin >> n >> m >> s;
ll mx = 0, mn = 0;
for (int i = 1; i <= n; i++) {
cin >> vec[i].w >> vec[i].v;
mx = max(mx, vec[i].w);
mn = min(mn, vec[i].w);
}
for (int i = 1; i <= m; i++) {
cin >> inter[i].l >> inter[i].r;
}
int l=mn-1, r=mx+1, mid = 0;
while(l <= r) {
mid = (l + r) / 2;
if (isValid(mid)) {
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans;
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(0); std::cout.tie(0);
solve();
return 0;
}