#include #include #include #include #include #include #include #include using namespace std; const long long INF=1e18+7; const int maxn=2005; const int maxx=1e5+100; long long dp[maxn][14];//dp[i][j]为花费 i为血 j为防 long long a[maxx],b[maxx],k[maxn],p[maxn]; templateinline T min(T a,T b,T c) { return min(min(a,b),c); } templateinline T max(T a,T b,T c) { return max(max(a,b),c); } templateinline T min(T a,T b,T c,T d) { return min(min(a,b),min(c,d)); } templateinline T max(T a,T b,T c,T d) { return max(max(a,b),max(c,d)); } inline long long Scan() { long long Res=0,ch,Flag=0; if((ch=getchar())=='-')Flag=1; else if(ch>='0' && ch<='9')Res=ch-'0'; while((ch=getchar())>='0'&&ch<='9')Res=Res*10+ch-'0'; return Flag ? -Res : Res; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { for(int i=1;i<=n;i++) { a[i]=Scan();b[i]=Scan(); } for(int i=1;i<=m;i++) { k[i]=Scan();p[i]=Scan(); } for(int i=0;i=0;j--) { dp[j][i]=min(dp[j][i],dp[j+1][i]); } } long long ans=0; for(int i=1;i<=n;i++) { ans+=dp[a[i]][b[i]]; } if(ans>=INF) { cout<<"-1"<