#include #define ll long long #define uint unsigned int #define ull unsigned long long #define inf 1010000000 #define infll 1010000000000000000ll #define vi vector #define vll vector #define pb push_back #define pii pair #define pll pair #define pdd pair #define mpr make_pair #define fi first #define se second #define pq priority_queue #define pqll priority_queue #define up(x,y) (x<(y)?x=(y):0) #define dn(x,y) (x>(y)?x=(y):0) #define ad(x,y) (x=(x+(y))%mod) #define cbn(x,y) ((ll)fac[x]*inv[y]%mod*inv[(x)-(y)]%mod) #define N 100009 using namespace std; int read(); ll readll(); int n, m, a[N], b[N], cost[N], damage[N], dp[1009], ans[N]; int main(){ while (~scanf("%d %d", &n, &m)){ int i; for (i = 1; i <= n; i++) scanf("%d %d", &a[i], &b[i]); for (i = 1; i <= m; i++) scanf("%d %d", &cost[i], &damage[i]); for (i = 0; i <= 10; i++){ memset(dp, 60, sizeof(dp)); dp[0] = 0; for (int j = 1; j <= 1000; j++) for (int k = 1; k <= m; k++) dn(dp[j], dp[j - max(0, damage[k] - i)] + cost[k]); for (int j = 1; j <= n; j++) if (b[j] == i) ans[j] = dp[a[j]]; } for (i = 1; i <= n; i++) if (ans[i] > inf) break; if (i <= n) puts("-1"); else{ ll sum = 0; for (i = 1; i <= n; i++) sum += ans[i]; printf("%lld\n", sum); } } return 0; } int read(){ int x=0; char ch=getchar(); bool flag=0; while (ch<'0' || ch>'9'){ if (ch=='-') flag=1; ch=getchar(); } while (ch>='0' && ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return flag?-x:x; } ll readll(){ ll x=0; char ch=getchar(); bool flag=0; while (ch<'0' || ch>'9'){ if (ch=='-') flag=1; ch=getchar(); } while (ch>='0' && ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return flag?-x:x; }