#include #define REP(i, x, n) for (int i = (x); i < (n); i++) #define endl "\n" #define MAXN 1000000 #define MOD 1000000007 #define inf 10000000000000 typedef long long ll; using namespace std; ll maxb, a, b, k, p, ans, n, m; vector q[100]; ll maxx[300]; ll cost[3000]; ll v[3000]; ll f[3000]; int main() { ios::sync_with_stdio(0); while (cin >> n >> m) { bool fflg = false; ans = 0; REP(i, 0, 11) { q[i].clear(); } REP(i, 0, n) { cin >> a >> b; q[b].push_back(a); maxx[b] = max(maxx[b], a); } REP(i, 0, m) { cin >> v[i] >> cost[i]; } REP(i, 0, 11) { for (int pp = 0; pp < 2500; pp++) f[pp] = inf; f[0] = 0; REP(k, 0, m) { if (cost[k] >= i) { REP(j, 0, maxx[i] * 2) { if (j - cost[k] + i >= 0) { f[j] = min(f[j], f[j - cost[k] + i] + v[k]); } } } } ll minn = inf; for (int l = maxx[i] * 2 - 2; l >= 0; l--) { if (f[l] != inf) { minn = min(f[l], minn); f[l] = minn; } else { f[l] = minn; } } REP(j, 0, q[i].size()) { // cout << "q[i][j]=" << q[i][j] << endl; if (f[q[i][j]] != inf) { ans += f[q[i][j]]; } else { fflg = true; break; } } if (fflg) { cout << -1 << endl; break; } } if (!fflg) cout << ans << endl; } return 0; }