#include using namespace std; typedef long long LL; const int maxn = 100100; const int maxm = 1010; const int maxp = 10010; const int maxa = 1010; const int maxb = 11; const LL inf = (1LL << 60); int n, m; int a[maxn], b[maxn], k[maxm], p[maxm]; LL f[maxa][maxb]; signed main() { // freopen("in", "r", stdin); while(~scanf("%d %d",&n,&m)) { for(int i = 0; i < maxa; i++) { for(int j = 0; j < maxb; j++) { f[i][j] = inf; } } for(int i = 0; i < maxb; ++i) f[0][i] = 0; int ha = -1, hb = -1; for(int i = 1; i <= n; i++) { scanf("%d%d",&a[i], &b[i]); ha = max(ha, a[i]); hb = max(hb, b[i]); } for(int i = 1; i <= m; i++) scanf("%d%d",&k[i], &p[i]); for(int i = 1; i <= ha; i++) { for(int j = 0; j <= hb; j++) { for(int x = 1; x <= m; x++) { if(j >= p[x]) continue; if(i + j - p[x] > 0) f[i][j] = min(f[i][j], f[i+j-p[x]][j] + k[x]); else f[i][j] = min(f[i][j], f[0][j] + k[x]); } } } LL ret = 0; bool flag = 0; for(int i = 1; i <= n; i++) { if(f[a[i]][b[i]] == inf) { flag = 1; break; } ret += f[a[i]][b[i]]; } if(flag) puts("-1"); else printf("%I64d\n", ret); } return 0; }