#include <stdio.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#define ll long long
using namespace std;
ll n,m,r,ans=0;
ll c[100005],buy[100005],flag[100005],cnt[100005];
struct node{
ll v;
ll value;
}cow[100005];
bool cmp1(node a,node b){
return a.value>b.value;
}
bool cmp2(ll a,ll b){
return a>b;
}
int main(){
scanf("%lld%lld%lld", &n,&m,&r);
for(ll i=1;i<=n;i++){
scanf("%lld", &c[i]);
}
for(ll i=1;i<=m;i++){
ll x,y;
scanf("%lld %lld", &cow[i].v,&cow[i].value);
}
for(ll i=1;i<=r;i++){
scanf("%lld", &buy[i]);
}
sort(cow+1,cow+1+m,cmp1);
sort(buy+1,buy+1+r,cmp2);
sort(c+1,c+n+1,cmp2);
cnt[1]=cow[1].v*cow[1].value;
for(int i=2;i<=m;i++){
cnt[i]=cnt[i-1]+cow[i].v*cow[i].value;
cow[i].v+=cow[i-1].v;
}
for(int i=2;i<=n;i++){
c[i]+=c[i-1];
}
for(int i=2;i<=r;i++){
buy[i]+=buy[i-1];
}
for(ll i=1;i<=n;i++){
ll sum=0,vsum=c[i];
for(ll j=1;j<=m;j++){
if(vsum<=cow[j].v){
sum+=cnt[j]-(cow[j].v-vsum)*cow[j].value;
vsum=0;
break;
}
}
if(vsum){
break;
}
sum+=buy[min(n-i,r)];
ans=max(sum,ans);
}
printf("%lld", ans);
return 0;
}