#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ll long long #define inf 1e10 using namespace std; inline void down(ll &x,const ll y){if(x>y)x=y;} const int maxn = 110000; const int maxm = 1100; const int maxa = 1100; const int maxb = 11; int n,m; int a[maxn],b[maxn]; int k[maxn],p[maxn]; ll f[maxb][maxa]; int main() { while(scanf("%d%d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); for(int i=1;i<=m;i++) scanf("%d%d",&k[i],&p[i]); for(int i=0;i<=10;i++) { f[i][0]=0; for(int j=1;j<=1000;j++) f[i][j]=inf; for(int j=1;j<=m;j++) if(p[j]>i) { int tmp=p[j]-i; for(int l=1;l<=tmp;l++) down(f[i][l],k[j]); for(int l=0;l+tmp<=1000;l++) if(f[i][l]!=inf) down(f[i][l+tmp],f[i][l]+k[j]); } } ll ans=0; for(int i=1;i<=n;i++) { if(f[b[i]][a[i]]==inf) { ans=-1; break; } ans+=(ll)f[b[i]][a[i]]; } printf("%I64d\n",ans); } return 0; }