#include using namespace std; const int maxn = 1055; const int maxm = 100055; template void read(TAT &a) { static char ch; while ((ch = getchar()) < '0' || ch > '9'); a = ch - '0'; while ((ch = getchar()) >= '0' && ch <= '9') a = a * 10 + ch - '0'; } template void Ckmin(TAT &a, const TAT &b) { if (a > b) a = b; } int n, m; int cost[maxn], agg[maxn]; int hp[maxm], def[maxm]; int f[11][maxn]; void Pre() { memset(f, 0x3f, sizeof(f)); for (int base = 0; base <= 10; ++base) { f[base][0] = 0; for (int i = 0; i <= 1000; ++i) { for (int j = 1; j <= m; ++j) { if (agg[j] > 0) { if (i + agg[j] <= 1000) { Ckmin(f[base][i + agg[j]], f[base][i] + cost[j]); } else { Ckmin(f[base][1000], f[base][i] + cost[j]); } } } } for (int i = 1000; i >= 1; --i) { Ckmin(f[base][i - 1], f[base][i]); } for (int i = 1; i <= m; ++i) { --agg[i]; } } } void Solve() { long long Ans = 0; for (int i = 1; i <= n; ++i) { if (def[i] > 10 || f[def[i]][hp[i]] > (1e9+100)) { puts("-1"); return; } Ans += f[def[i]][hp[i]]; } cout << Ans << endl; } int main() { while (scanf("%d%d", &n, &m) != EOF) { for (int i = 1; i <= n; ++i) { read(hp[i]); read(def[i]); } for (int i = 1; i <= m; ++i) { read(cost[i]); read(agg[i]); } Pre(); Solve(); } return 0; }