#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #define MAX 20 typedef long long ll; using namespace std; const int inf = 0x3f3f3f3f; ll a[100010], b[100010]; ll k[1010], p[1010]; ll dp[1010][15]; int main() { int n, m; while (scanf("%d%d", &n, &m) != EOF) { ll up1 = 0, up2 = 0, hp = 0; for (int i = 0; i < n; i++) { scanf("%lld%lld", &a[i], &b[i]); up1 = max(up1, b[i]); hp = max(hp, a[i]); } for (int i = 0; i < m; i++) { scanf("%lld%lld", &k[i], &p[i]); up2 = max(up2, p[i]); } if (up1 >= up2) { printf("-1\n"); continue; } memset(dp, 0, sizeof(dp)); for (int i = 0; i <= 10; i++) { for (int j = 1; j <= hp; j++) { dp[j][i] = inf; for (int u = 0; u < m; u++) { int dmg = p[u] - i; if (dmg <= 0) continue; if (dmg >= j) dp[j][i] = min(dp[j][i], k[u]); else dp[j][i] = min(dp[j - dmg][i] + k[u], dp[j][i]); } } } ll ans = 0; for (int i = 0; i < n; i++) ans += dp[a[i]][b[i]]; printf("%lld\n", ans); } return 0; }