#include #include #include #include #include #include using namespace std; typedef long long ll; const int maxn = 1005; const ll INF = 0x3f3f3f3f3f3f3f3f; ll dp[maxn*2][11],res; int sum[maxn][11],k[maxn],p[maxn],n,m,x,y,ans; bool flag; void init(){ memset(dp, 0x3f, sizeof(dp)); memset(sum, 0, sizeof(sum)); ans = 0, res = 0, flag = false; for (int j = 0; j <= 10; j++) dp[0][j] = 0; for (int i = 0; i < n; i++) { scanf("%d%d", &x, &y); sum[x][y]++; } for (int i = 0; i < m; i++) scanf("%d%d", &k[i], &p[i]); } int main() { while (~scanf("%d%d", &n, &m)) { init(); for (int j = 0; j <= 10; j++) { for (int i = 0; i <= 1000; i++) { for (int h = 0; h < m; h++) { if (p[h] <= j) continue; if (dp[i][j] == INF) continue; dp[i + p[h] - j][j] = min(dp[i + p[h] - j][j], dp[i][j] + k[h]); } } for (int i = 2000; i >= 0; i--) dp[i][j] = min(dp[i][j], dp[i + 1][j]); } for (int j = 0; j <= 10; j++) { for (int i = 0; i <= 1000; i++) { ans += sum[i][j]; if (dp[i][j] < INF) { res += ans * dp[i][j]; ans = 0; } } if (ans > 0) {puts("-1");flag = true;break;} } if (!flag) printf("%I64d\n", res); } return 0; }