#include #include #include #include #include using namespace std; long long n, m; int monsters[11][1001]; bool has[11]; int costs[1001]; int kills[1001]; long long f[1001]; long long process() { memset(monsters, 0, sizeof(monsters)); memset(has, 0, sizeof(has)); for (int i = 0; i < n; ++i) { int life, def; cin >> life >> def; monsters[def][life]++; has[def] = true; } int maxKill = 0; for (int i = 0; i < m; ++i) { cin >> costs[i] >> kills[i]; if (kills[i] > maxKill) { maxKill = kills[i]; } } // cout << maxKill; for (int i = maxKill; i < 11; ++i) { if (has[i]) return -1; } long long total = 0; for (int i = 0; i < 11; ++i) { memset(f, 0x7f, sizeof(f)); f[0] = 0; for (int j = 1; j <= 1000; ++j) for (int k = 0; k < m; ++k) { if (kills[k] > 0) { int t = j - kills[k]; long long c = t >= 0 ? f[t] : 0; f[j] = min(f[j], c + costs[k]); } } for (int l = 0; l <= 1000; ++l) { total += f[l] * monsters[i][l]; } for (int k = 0; k < m; ++k) { --kills[k]; } } return total; } int main(void) { while (cin >> n >> m) { cout << process() << endl; } return 0; }