#include #include #include using namespace std; typedef __int64 LL; struct jineng { int cost,val; }a[1010]; int hp[100010],def[100010],n,m,inf=1e9; LL res,dp[2][3010][12]; void calc(int df) { for(int j=0;j<=3000;j++) dp[0][j][df]=inf; dp[0][0][df]=0; for(int i=1;i<=m;i++) { int val=a[i].val-df; if(val<=0) { for(int j=0;j<=3000;j++) dp[i%2][j][df]=dp[(i-1)%2][j][df]; continue; } for(int j=0;j<=3000;j++) { dp[i%2][j][df]=dp[(i-1)%2][j][df]; if(j>=val) dp[i%2][j][df]=min(dp[i%2][j][df],dp[i%2][j-val][df]+a[i].cost); } for(int j=2999;j>=0;j--) dp[i%2][j][df]=min(dp[i%2][j][df],dp[i%2][j+1][df]); } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { int maxdef=-1,maxval=-1; for(int i=1;i<=n;i++) { scanf("%d%d",&hp[i],&def[i]); maxdef=max(maxdef,def[i]); } for(int i=1;i<=m;i++) { scanf("%d%d",&a[i].cost,&a[i].val); maxval=max(maxval,a[i].val); } if(maxval<=maxdef) { printf("-1\n"); continue; } for(int i=0;i<=10;i++) calc(i); res=0; for(int i=1;i<=n;i++) res+=dp[m%2][hp[i]][def[i]]; printf("%I64d\n",res); } return 0; }