#include #include #include using namespace std; #define oo 0x3f3f3f3f typedef long long ll; long long dp[15][1100]; int a[100010], b[100010], k[1100], p[1100]; struct ad { int k, p; } s[1100]; int main() { int n, m; while(scanf("%d %d", &n, &m)!=EOF) { for(int i=1; i<=n; i++) scanf("%d %d", &a[i], &b[i]); for(int i=1; i<=m; i++) scanf("%d %d", &s[i].k, &s[i].p); for(int i=0; i<=12; i++) for(int j=0; j<=1000; j++) dp[i][j] = 1e17; for(int i=0; i<=12; i++) dp[i][0] = 0; for(int i=0; i<=12; i++) for(int j=1; j<=1010; j++) { for(int q=1; q<=m; q++) { if(s[q].p>i) { if(i+j-s[q].p>=0) { dp[i][j] = min(dp[i][j], dp[i][i+j-s[q].p]+s[q].k); } else { dp[i][j] = min(dp[i][j], dp[i][0]+s[q].k); } } } } ll ans = 0; for(int i=1; i<=n; i++) { if(dp[b[i]][a[i]] == 1e17) { ans = -1; break; } ans += dp[b[i]][a[i]]; } printf("%I64d\n", ans); } return 0; }