#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
const ll N=1e6+10;
ll n,m,x;
struct node{
ll p,c;
}a[N];
bool cmp(node a1,node a2){
return a1.p<a2.p;
}
struct car{
ll num,id,flag,num2;
}c[N];
bool cmp2(car a1,car a2){
return a1.num>a2.num;
}
bool vis[N];
void solve(){
cin >> n >> m >> x;
for(int i=1;i<=n;i++){
cin >> a[i].p >> a[i].c;
}
for(int i=1;i<=m;i++){
cin >> c[i].num >> c[i+m].num;
c[i].id=i;
c[i].flag=0;
c[i].num2=c[i+m].num;
c[i+m].id=i;
c[i+m].flag=1;
c[i+m].num2=c[i].num;
}
sort(a+1,a+1+n,cmp);
sort(c+1,c+1+2*m,cmp2);
ll l=1,r=n;
ll ans=0;
for(int i=1;i<=2*m;i++){
if(vis[c[i].id]) continue ;
vis[c[i].id]=1;
if(c[i].flag==0){
ans+=(c[i].num*a[l].p+c[i].num2*abs(a[l].p-x));
a[l].c--;
if(a[l].c==0) l++;
}
else{
ans+=(c[i].num2*a[r].p+c[i].num*abs(a[r].p-x));
a[r].c--;
if(a[r].c==0) r--;
}
}
cout << 2*ans << endl;
return ;
}
ll T=1;
signed main(){
// cin >> T;
while(T--) solve();
return 0;
}
/*
3 4 10
1 1
2 1
8 3
5 3
7 2
9 0
1 10000
*/
思路和正解一样啊,为啥不行