#include #include #include #include #define ll long long #define max(a,b) (((a) > (b)) ? (a) : (b)) #define min(a, b) (((a) < (b)) ? (a) : (b)) using namespace std; const int N = 100010; const int M = 1010; ll a[N], b[N], p[M], k[M]; ll dp[M][12]; int main() { int n, m; while (scanf("%d %d", &n, &m) != EOF) { ll ans1 = 0, ans2 = 0, ans3 = 0; for (int i = 1; i <= n; i++) { cin >> a[i] >> b[i]; ans1 = max(ans1, a[i]); ans2 = max(ans2, b[i]); } for (int i = 1; i <= m; i++) { cin >> k[i] >> p[i]; ans3 = max(ans3, p[i]); } if (ans3 <= ans2) { printf("-1\n"); continue; } for (int i = 0; i < M; i++) { for (int j = 0; j < 12; j++) dp[i][j] = 100000000000L; } for (int i = 0; i < 12; i++) dp[0][i] = 0; for (int i = 1; i <= m; i++) { for (int j = 1; j <= ans1; j++) { for (int l = 0; l < 12; l++) { if (p[i] <= l) continue; int ans = p[i] - l; if (ans >= j) dp[j][l] = min(dp[j][l], dp[0][l] + k[i]); else dp[j][l] = min(dp[j][l], dp[j - ans][l] + k[i]); } } } ll sum = 0; for (int i = 1; i <= n; i++) { if (a[i] <= 0) continue; sum += dp[a[i]][b[i]]; } printf("%lld\n", sum); } return 0; }