#include using namespace std; #define ll long long inline void read(int &x) { x=0; char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } } const int N=100005,M=2005; int n,m,x[N],y[N],a[M],v[M],f[12][M],ma1,ma2; ll ans; int main() { //freopen("bdt3.in","r",stdin); //freopen("bdt3.out","w",stdout); while (~scanf("%d%d",&n,&m)) { memset(f,0x3f,sizeof(f)); ma1=0; ma2=0; for (int i=1;i<=n;++i) { read(x[i]); read(y[i]); ma1=max(ma1,y[i]); } for (int i=1;i<=m;++i) { read(v[i]); read(a[i]); ma2=max(ma2,a[i]); } if (ma2<=ma1) { puts("-1"); continue; } for (int i=0;i<=10;++i) { f[i][0]=0; for (int j=1;j<=m;++j) if (a[j]>i) for (int k=a[j]-i;k<=2000;++k) f[i][k]=min(f[i][k],f[i][k-a[j]+i]+v[j]); for (int j=2000;j;--j) f[i][j]=min(f[i][j],f[i][j+1]); } ans=0; for (int i=1;i<=n;++i) ans=ans+f[y[i]][x[i]]; printf("%I64d\n",ans); } return 0; }