#include<iostream>
#include<math.h>
using namespace std;
int N;
int M;
long long S;
long long mini;
typedef struct Stone
{
int wight;
int val;
};
typedef struct QuJian
{
int begin;
int end;
};
long long y = 0;
bool Cheak(int W,QuJian*brr,Stone*arr)
{
y = 0;
for (int i = 0; i < M; i++)
{
long long val_1 = 0;
long long val_2 = 0;
for (int j = brr[i].begin; j <= brr[i].end; j++)
{
val_1 += (arr[j].wight >= W);
val_2 += (arr[j].wight >= W) * arr[j].val;
}
y += val_1 * val_2;
}
if (abs(S - y) < mini)mini = abs(S - y);
if (y > S)
{
return true;
}
else return false;
}
int main()
{
cin >> N >> M >> S;
mini = 1e12;
Stone* arr = new Stone[N + 1];
QuJian* brr = new QuJian[M];
for (int i = 1; i <= N; i++)cin >> arr[i].wight >> arr[i].val;
for (int i = 0; i < M; i++)cin >> brr[i].begin >> brr[i].end;
long long l = 0;
long long r = S;
while (l <= r)
{
long long mid = (r + l) /2;
if (Cheak(mid, brr, arr))
{
l = mid + 1;
}
else
{
r = mid - 1;
}
}
cout << mini << endl;
return 0;
}