#include #include #include #include #include #define N 100005 #define M 2005 #define INF 2147483647 #define P(a) putchar(a) #define LL long long #define fo(i,a,b) for(i=a;i<=b;i++) #define fd(i,a,b) for(i=a;i>=b;i--) #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std; struct note{ LL a,b; };note a[N]; LL i,j,n,m,l,r,x,B,ans; LL f[M]; LL k[M],p[M],nx[N]; bool pp,bz[12]; bool cmp(note x,note y){return x.b9)write(x/10); P(x%10+'0'); } LL read(){ LL fh=0,rs=0;char ch=0; while((ch<'0'||ch>'9')&&(ch^'-'))ch=getchar(); if(ch=='-')fh=1,ch=getchar(); while(ch>='0'&&ch<='9')rs=(rs<<3)+(rs<<1)+(ch^'0'),ch=getchar(); return fh?-rs:rs; } int main(){ while (scanf("%I64d%I64d",&n,&m)!=EOF){ memset(bz,0,sizeof(bz)); ans=0;pp=0; fo(i,1,n){ a[i].a=read(); a[i].b=read(); bz[a[i].b]=1; } sort(a+1,a+n+1,cmp); a[n+1].b=11; fd(i,n,1) if (a[i].b!=a[i+1].b) nx[i]=i+1; else nx[i]=nx[i+1]; fo(i,1,m)k[i]=read(),p[i]=read(); l=1; fo(B,0,10) if (bz[B]){ fo(i,0,2001)f[i]=INF; f[0]=0; fo(i,1,m){ if (p[i]-B>0) fo(j,p[i]-B,2000){ f[j]=Min(f[j],f[j-(p[i]-B)]+k[i]); } } fd(j,2000,0) f[j]=Min(f[j],f[j+1]); fo(i,l,nx[l]-1){ if (f[a[i].a]==INF){ printf("-1\n"); pp=1; break; } ans+=f[a[i].a]; } if (pp) break; l=nx[l]; } if (!pp) write(ans),P('\n'); } return 0; }