#include using namespace std; typedef long long LL; const int INF = 0x3f3f3f3f; const int maxn = 100000+10; const int maxm = 1000+10; int A[maxn], B[maxn], P[maxn], K[maxn]; int dp[maxm][11]; int n, m; void init() { memset(dp, INF, sizeof(dp)); for (int j = 0; j <= 10; j++) { dp[0][j] = 0; for (int k = 0; k <= m; k++) { for (int l = 1; l <= 1000; l++) { if (P[k] >= j) { if (l-P[k]+j<0) dp[l][j]=min(dp[l][j], dp[0][j]+K[k]); else dp[l][j]=min(dp[l][j], dp[l-P[k]+j][j] + K[k]); } } } } } int main(int argc, char const *argv[]) { while (scanf("%d%d", &n, &m) != EOF) { for (int i = 0; i < n; i++) scanf("%d%d", &A[i], &B[i]); for (int i = 0; i < m; i++) scanf("%d%d", &K[i], &P[i]); init(); LL ans = 0; for (int i = 0; i < n; i++) { if (dp[A[i]][B[i]] == INF) {ans = -1; break;} ans += dp[A[i]][B[i]]; } printf("%lld\n", ans); } return 0; }