#include #include #include #include #include #include #include #include #include #include #include using namespace std; bool can; int n,m,a[100001],b[100001],k[1001],p[1001],f[2001][11],mx,g[11]; long long ans=0; void work(int x,int y) { int i,j; f[0][y]=0; for (i=1;i<=x;i++) f[i][y]=(1<<30); g[y]=(1<<30); for (i=1;i<=m;i++) if (p[i]>y) for (j=p[i]-y;j<=x;j++) if (f[j-p[i]+y][y]+k[i]1000) g[y]=min(g[y],f[j][y]); } } int main() { while (~scanf("%d%d",&n,&m)) { int i,j; ans=0; for (i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); for (i=1;i<=m;i++) scanf("%d%d",&k[i],&p[i]); for (i=0;i<=10;i++) work(2000,i); can=true; for (i=1;i<=n;i++) { bool fg=false; int p=(1<<30); for (j=a[i];j<=1000;j++) if (f[j][b[i]]!=(1<<30)) { fg=true; p=min(p,f[j][b[i]]); } if (g[b[i]]!=(1<<30)) { fg=true; p=min(p,g[b[i]]); } if (!fg) { can=false; break; } ans+=p; } if (!can) puts("-1"); else printf("%I64d\n",ans); } return 0; }