#include #include #include #include #include #include #include #include #include #include #include using namespace std; #pragma comment(linker, "/STACK:10240000000,10240000000") #define mem(x,y) memset(x,y,sizeof(x)) #define pb push_back #define bug puts("==========="); #define REP(i,n) for(int i=0;i pii; #define CHG ch=getchar() #define FRD x=bo=0; for(CHG;ch<'0'||ch>'9';CHG) if(ch=='-')bo=1; #define FR2 for(;ch>='0'&&ch<='9';x=(x<<1)+(x<<3)+ch-'0',CHG); char ch; int bo; inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';} inline void RD(int &x){ FRD FR2 if (bo)x=-x; } inline void RD(ll &x){ FRD FR2 if (bo)x=-x; } inline ll RD(){ ll x; RD(x); return x; } inline void RD(char *s){///scanf %s for (CHG;blank(ch);CHG); for (;!blank(ch);CHG)*s++=ch; *s=0; } inline void RD(char &c){for(CHG;blank(c);CHG);} template inline void OT(T x){ static char buf[20]; char *p1=buf;if (!x)*p1++='0';if (x<0)putchar('-'),x=-x; while(x)*p1++=x%10+'0',x/=10; while(p1--!=buf)putchar(*p1); } inline void pe(){puts("");}//输出回车 inline void pk(){putchar(' ');}//输出空格 const double inf=1e9; const ll mod =100000007; const long long INF =2e18+5; #define pii pair #define mytype ll const int maxn=1e5+3; /*======================================*/ ll dp[12][2008]; ll a[maxn],b[maxn],kk[maxn],p[maxn]; int main(){ int n,m; while(~scanf("%d",&n)){ RD(m); REP(i,n) { RD(a[i]); RD(b[i]); } REP(i,m) { RD(kk[i]); RD(p[i]); } REP(i,11){ REP(k,2005) dp[i][k]=1e10; dp[i][0]=0; REP(j,m)if(p[j]>i){ int attack=p[j]-i; for(int k=attack;k<2005;k++){ dp[i][k]=min(dp[i][k],dp[i][k-attack]+kk[j]); } } for(int k=2003;k>=0;k--) dp[i][k]=min(dp[i][k],dp[i][k+1]); } ll ans=0; REP(i,n) { ans+=dp[b[i]][a[i]]; if(dp[b[i]][a[i]]==1e10) { ans=-1; break; } } OT(ans); pe(); } return 0; }