#include<cstdio>
#include<algorithm>
using namespace std;
const int INF =
0x3f3f3f3f;
int dp[
15][
1005];
void sovel(
int k,
int p)
{
for (
int b =
1; b <
11; b++)
{
if (b >= p)
continue;
else
{
int ss = p - b;
for (
int i =
1; i <
1001; i++)
{
if (i <= ss)
dp[b][i] = min(dp[b][i], k);
else
dp[b][i] = min(dp[b][i], dp[b][i - ss] + k);
}
}
}
}
struct M
{
int a;
int b;
}Mm[
100002];
int main()
{
int n, m,i,j,max_b;
int k[
1005], p[
1005];
long long ans ;
while (
scanf(
"%d%d",&n,&m)!=EOF)
{
max_b = -
1;
for (i =
0; i < n; i++)
{
scanf(
"%d%d", &Mm[i].a, &Mm[i].b);
max_b = max(Mm[i].b, max_b);
}
bool flag =
true;
for (i =
0; i < m; i++)
{
scanf(
"%d%d", &k[i], &p[i]);
if (p[i] > max_b)
flag =
false;
}
if (flag)
{
printf(
"-1\n");
continue;
}
for(i=
0;i<
15;i++)
for (j =
0; j <
1005; j++)
{
if (i ==
0)
dp[i][j] =
0;
else
dp[i][j] = INF;
}
for (i =
0; i < m; i++)
sovel(k[i], p[i]);
ans =
0;
for (i =
0; i < n; i++)
ans += dp[Mm[i].b][Mm[i].a];
printf(
"%I64d\n", ans);
}
}