#include using namespace std; int main(int argc, char **argv) { ios::sync_with_stdio(false), cin.tie(nullptr); int n, m; while (cin >> n >> m) { vector hp(n), defense(n); for (int i = 0; i < n; i++) { cin >> hp[i] >> defense[i]; } vector cost(m), damage(m); for (int i = 0; i < m; i++) { cin >> cost[i] >> damage[i]; } int max_hp = *max_element(hp.begin(), hp.end()); vector> dp(11, vector(max_hp + 1, 1ll << 50)); for (int i = 0; i <= 10; i++) { dp[i][0] = 0; for (int j = 0; j < m; j++) { if (damage[j] < i) { continue; } for (int k = 0; k < max_hp; k++) { int pos = min(max_hp, k + damage[j] - i); dp[i][pos] = min(dp[i][pos], dp[i][k] + cost[j]); } } for (int j = max_hp - 1; j >= 0; j--) { dp[i][j] = min(dp[i][j], dp[i][j + 1]); } } int64_t ans = 0; for (int i = 0; i < n; i++) { if (dp[defense[i]][hp[i]] == (1ll << 50)) { ans = -1; break; } else { ans += dp[defense[i]][hp[i]]; } } cout << ans << "\n"; } }