#include #include #include #include #include #define N 100086 #define M 1086 #define inf 1000000000 #define ll long long using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int a[N],b[N],k[M],p[M],h[M],v[M]; bool apr[20]; int f[20][M]; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF){ memset(apr,0,sizeof(apr));int mx=0; for(int i=1;i<=n;i++){ a[i]=read();b[i]=read(); apr[b[i]]=1;mx=max(a[i],mx); } for(int i=1;i<=m;i++){k[i]=read();p[i]=read();} for(int B=0;B<=10;B++) if(apr[B]){ for(int i=0;i<=mx;i++)f[B][i]=inf; f[B][0]=0;int num=0; for(int i=0;i<=m;i++) if(p[i]>B){ h[++num]=p[i]-B;h[num]=min(h[num],mx);v[num]=k[i]; } for(int i=1;i<=mx;i++) for(int j=1;j<=num;j++) if(h[j]>i)f[B][i]=min(f[B][i],v[j]);else f[B][i]=min(f[B][i],f[B][i-h[j]]+v[j]); } int flag=1;ll ans=0; for(int i=1;i<=n;i++) if(f[b[i]][a[i]]==inf)flag=0;else ans+=f[b[i]][a[i]]; if(flag)cout<