#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef unsigned long long uLL; const int maxn=100000+10; const int maxm=1000+10; const int mod=(int)1e9+7; const int INF=0x3f3f3f3f; const LL LINF=(1LL<<60); const double PI=acos(-1.0); #define mst(a,b) memset(a,b,sizeof(a)) #define rep(i,a,b) for (int i=(a);i #define X first #define Y second int a[maxn],b[maxn],p[maxm],k[maxm],dp[15][maxm]; int main(){ #ifdef local freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); #endif ios::sync_with_stdio(false); cin.tie(0); int n,m; while (cin>>n>>m){ int mx_hp=0; for (int i=1;i<=n;i++) { cin>>a[i]>>b[i]; mx_hp=max(mx_hp,a[i]); } for (int i=1;i<=m;i++) cin>>k[i]>>p[i]; mst(dp,0x3f); for (int i=0;i<=10;i++){ dp[i][0]=0; for (int l=1;l<=m;l++){ int d=p[l]-i; for (int j=0;j<=mx_hp;j++){ if (j-d>=0) dp[i][j]=min(dp[i][j-d]+k[l],dp[i][j]); else dp[i][j]=min(dp[i][j],k[l]); } } } LL ans=0; for (int i=1;i<=n;i++){ if (dp[b[i]][a[i]]==INF){ ans=-1; break; } ans+=dp[b[i]][a[i]]; } cout<