#include #include #include #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int N=1e5+5,M=1005; int a[N],b[N],k[M],p[M],n,m,maxhp,max1,max2; long long ans; int dp[11][M];//DEF,伤害(no less than) void clear(){ max1=maxhp=max2=0; ans=0l; memset(dp,0x3f,sizeof(dp)); } int main(){ while(scanf("%d%d",&n,&m)!=EOF){ clear(); rep(i,1,n){ scanf("%d%d",a+i,b+i); max1=max(b[i],max1); maxhp=max(a[i],maxhp); } rep(i,1,m){ scanf("%d%d",k+i,p+i); max2=max(p[i],max2); } if(max1>=max2){//特判 printf("-1\n"); continue; } rep(def,0,max1){ dp[def][0]=0; rep(i,1,maxhp){//消耗血量 rep(j,1,m){//j技能 if(p[j]<=def) continue; dp[def][i]=min(dp[def][max(i-p[j]+def,0)]+k[j],dp[def][i]); } } } rep(i,1,n) ans+=dp[b[i]][a[i]]; printf("%lld\n",ans); } return 0; }