#include<bits/stdc++.h>
using namespace std;
long long n,m,r,a[100010],c[100010],mon[100010],ans,num=1,sum,tmp=1,d;
struct s
{
long long p,l;
}b[100010];
bool cmp1(int x,int y){return x>y;}
bool cmp2(s d1,s d2){return d1.p>d2.p;}
int main()
{
cin >> n >> m >> r;
d=n;
for (int i=1;i<=n;i++) cin >> a[i];
for (int i=1;i<=m;i++) cin >> b[i].l >> b[i].p;
for (int i=1;i<=r;i++) cin >> c[i];
sort(a+1,a+n+1,cmp1);
sort(b+1,b+m+1,cmp2);
sort(c+1,c+r+1,cmp1);
for (int i=1;i<=n;i++)
{
if (d<=i)
{
if (mon[d]<c[tmp])
{
mon[d]=c[tmp];
d--;
tmp++;
}
continue;
}
sum=0;
if (num>m) break;
while (a[i])
{
if (a[i]>b[num].l)
{
sum+=b[num].l*b[num].p;
a[i]-=b[num].l;
b[num].l=0;
num++;
}
else
{
sum+=a[i]*b[num].p;
b[num].l-=a[i];
a[i]=0;
break;
}
}
mon[i]=sum;
if (tmp<=r)
{
long long f=0,j=tmp,t=0,minn=1e18;
for (;j<=r;j++)
{
if (sum<c[j])
{
f=1;
break;
}
}
if (f)
{
mon[d]=c[tmp];
tmp++;
d--;
}
}
}
for (int i=1;i<=n;i++) ans+=mon[i];
cout << ans;
return 0;
}
就对了第一个测试点,其余全错 QWQ