#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<queue> #include<vector> #include<set> #include<map> using namespace std; long long n,m; long long a[200005],b[200005]; long long k[20050],p[20050]; long long d[5005][21]; void dp() { memset(d,0x7f,sizeof(d)); for(int i=0;i<=10;i++) d[0][i]=0; for(int s=0;s<=10;s++) { for(int i=1;i<=2001;i++) { for(int j=0;j<m;j++) { if(p[j]<=s)continue;//no damage if(i-(p[j]-s)<0) d[i][s]=min(d[i][s],k[j]); else d[i][s]=min(d[i][s],d[i-p[j]+s][s]+k[j]); } } } } int main() { //freopen("in.txt","r",stdin); while(~scanf("%lld %lld",&n,&m)) { for(int i=0;i<n;i++) { scanf("%lld %lld",a+i,b+i); } for(int i=0;i<m;i++) scanf("%lld %lld",k+i,p+i); long long res=0;bool flag=true; dp(); long long f=0x7fffffffffffffff; for(int j=0;j<=10;j++) { f=0x7fffffffffffffff; for(int i=2001;i>=0;i--) { f=min(f,d[i][j]); d[i][j]=f; } } for(int i=0;i<n;i++) { long long r=d[a[i]][b[i]]; if(r>=0x7f7f7f7f7f7f7f7e) { flag=false; break; } res+=r; } if(!flag) printf("-1 "); else printf("%lld ",res); } return 0; }