#include #include #include using namespace std; typedef long long LL; const int N = 100010,M = 1010; int a[N],b[N]; int k[M],p[M]; LL dp[M][15]; int main() { int n,m; while(~scanf("%d%d", &n,&m)) { int hp=0,mp=0,ak=0; for (int i = 1; i <= n; i ++ ) { scanf("%d%d", &a[i],&b[i]); hp=max(a[i],hp); mp=max(b[i],mp); } for (int i = 1; i <= m; i ++ ) { scanf("%d%d", &k[i], &p[i]); ak=max(ak,p[i]); } if(ak<=mp)//连护甲都打不穿 { puts("-1"); continue; } for (int i = 0; i <= 10; i ++ ) { for (int j = 1; j <= hp; j ++ ) { dp[j][i]=1e18; for (int u = 1; u <= m; u ++ ) { int damage=p[u]-i; if(damage<=0)continue;//护甲都打不穿 if(damage>=j)//可以打死 { dp[j][i]=min(dp[j][i],(long long)k[u]); } else { dp[j][i]=min(dp[j][i],dp[j-damage][i]+k[u]); } } } } LL res=0; for (int i = 1; i <= n; i ++ ) { res+=dp[a[i]][b[i]];//scanf("%d%d", &a[i],&b[i]); } printf("%lld\n",res); } return 0; }