#include #include #include #include using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; ll a[120000], b[120000]; ll k[1200], p[1200]; ll dp[1200][22];//dp[i][j]生命为i防御为j的怪兽所需水晶 int main() { int n, m; while (cin >> n >> m) { for (int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]); ll maxp = 0; for (int i = 0; i < m; i++) { scanf("%d%d", &k[i], &p[i]); maxp = max(maxp, p[i]); } int flag = 0; for (int i = 0; i < n; i++) { if (b[i] >= maxp) { flag = 1; break; } } if (flag) { puts("-1"); continue; } memset(dp, INF, sizeof(dp)); for (int j = 0; j <= 12; j++) dp[0][j] = 0; for (int x = 0; x < m; x++) { for (int j = 0; j <= 10; j++) for (int i = 0; i <= 1000; i++) { if (p[x] <= j)continue; if (i <= p[x] - j)//不堪一击or恰好一击 dp[i][j] = min(dp[i][j], k[x]); else if (dp[i][j] > dp[i - (p[x] - j)][j] + k[x]) dp[i][j] = dp[i - (p[x] - j)][j] + k[x]; } } ll sum = 0; for (int i = 0; i < n; i++) { sum += dp[a[i]][b[i]]; } cout << sum << endl; } return 0; }