#include #define int long long using namespace std; const int maxn=1100; int read(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){ if(ch=='-') f=-1; ch=getchar(); } while(isdigit(ch)){ x=x*10+ch-'0'; ch=getchar(); } return x*f; } int n,m,a[maxn*100],b[maxn*100],k[maxn],p[maxn],dp[maxn][12]; signed main(){ while(cin>>n>>m){ for(int i=1;i<=n;++i){ a[i]=read(); b[i]=read(); } for(int j=1;j<=m;++j){ k[j]=read(); p[j]=read(); } memset(dp,0x3f,sizeof(dp)); int num=dp[0][0]; for(int i=0;i<=1000;++i){ for(int j=0;j<=10;++j){ if(i==0) dp[i][j]=0; else{ for(int c=1;c<=m;++c){ if(p[c]<=j) continue; else if(p[c]-j>=i){ dp[i][j]=min(dp[i][j],k[c]); } else dp[i][j]=min(dp[i][j],dp[i-(p[c]-j)][j]+k[c]); } } } } int ans=0; bool juge=false; for(int i=1;i<=n;++i){ if(dp[a[i]][b[i]]==num){ cout<<-1<<"\n"; juge=true; break; } ans+=dp[a[i]][b[i]]; } if(juge) continue; else cout<