// // main.cpp // baidu // // Created by wch on 2017/8/5. // Copyright © 2017年 wch. All rights reserved. // #include #include #include #include #include using namespace std; const long long INF = 1e9; int main(){ int n, m; int i, j, k; while(cin >> n >> m){ vector vec_a(n), vec_b(n); vector vec_k(m), vec_p(m); long long max_a = -1; long long max_b = -1; long long max_p = -1; for(i=0; i> vec_a[i] >> vec_b[i]; max_a = max(max_a, vec_a[i]); max_b = max(max_b, vec_b[i]); } for(i=0; i> vec_k[i] >> vec_p[i]; max_p = max(max_p,vec_p[i]); } if(max_b >= max_p){ cout << -1 << endl; continue; } vector > dp(max_a+1, vector(11, INF)); for(i=0; i<=10; ++i){ dp[0][i] = 0; } for(i=0; i<=10; ++i){ for(j=1; j<=max_a; ++j){ for(k=0; k= j){ dp[j][i] = min(dp[j][i], vec_k[k]); } else if(vec_p[k]-i > 0){ dp[j][i] = min(dp[j][i], dp[j-(vec_p[k]-i)][i]+vec_k[k]); } } } } long long ans = 0; for(i=0; i