#include #include #include #include using namespace std; #define LL long long const LL inf = 10000000000000000; int n, m; LL a[100005], b[100005], p[1005]; LL k[1005], dp[2010][16]; void init() { for(int i = 0; i <= 2005; ++i) for(int j = 0; j <= 15; ++j) { dp[i][j] = inf; if(i == 0) dp[i][j] = 0; } for(int i = 0; i < m; ++i) { for(int j = 0; j <= 10; ++j) { int damage = p[i] - j; if(damage < 0) continue; for(int v = damage; v <= 2005; ++v) dp[v][j] = min(dp[v][j], dp[v - damage][j] + k[i]); } } for(int i = 2000; i >= 0; --i) for(int j = 0; j <= 10; ++j) dp[i][j] = min(dp[i][j], dp[i + 1][j]); } int main() { while(~scanf("%d %d", &n, &m)) { for(int i = 0; i < n; ++i) scanf("%I64d %I64d", &a[i], &b[i]); for(int i = 0; i < m; ++i) scanf("%I64d %I64d", &k[i], &p[i]); init(); LL ans = 0; int flag = 0; for(int i = 0; i < n; ++i) { if(dp[a[i]][b[i]] == inf) { flag = 1; break; } ans += dp[a[i]][b[i]]; } if(flag) printf("-1\n"); else printf("%I64d\n", ans); } }