#include using namespace std; typedef long long ll; typedef pair P; #define fi first #define se second #define INF 0x3f3f3f3f const int maxn = 1000 + 10; int n,m; P a[maxn * 1000],b[maxn*10]; ll dp[maxn][22]; int main() { while( ~ scanf("%d%d",&n,&m)) { int t1 = 0,t2 = 0; for(int i = 1; i <= n; i ++) scanf("%d%d",&a[i].fi,&a[i].se); for(int i = 1; i <= m; i ++) scanf("%d%d",&b[i].fi,&b[i].se),t2 = max(t2,b[i].se); int flag = 0; for(int i=1;i<=n;i++) { if(a[i].se>=t2) { flag = 1; break; } } if(flag) { printf("-1\n"); continue; } memset(dp,INF,sizeof(dp)); for(int i=0;i<=10;i++) dp[0][i] = 0; for(int k = 0; k <= 12; k ++) { for(int i = 1; i <= m; i ++) { if(b[i].se > k) for(int j = 0; j <= 1000; j ++) { if(j <= b[i].se - k) dp[j][k] = min(dp[j][k],(ll)b[i].fi); else dp[j][k] = min(dp[j][k],dp[j - b[i].se + k][k] + b[i].fi); } } } ll ans = 0; for(int i = 1;i <= n; i ++) { ans += dp[a[i].fi][a[i].se]; } cout<