#include using namespace std; int n, m; class M { public: int health, defence; M(); M(int health, int defence); }; M::M(){} M::M(int health, int defence) { this->health=health; this->defence=defence; } class A { public: int cost, harm; A(); A(int cost, int harm); }; A::A(){} A::A(int cost, int harm) { this->cost=cost; this->harm=harm; } M ms[100001]; A a[1001]; long long amap[1001][11]; int maxa=0, maxh=0, maxd=0; long long calc() { // check if(maxd>=maxa)return -1; // init for(int i=0;i<=maxd;i++) amap[0][i]=0; long long remain_health, new_cost; for(int i=1;i<=maxh;i++) { for(int j=0;j<=maxd;j++) { for(int k=0;k!=m;k++) { if(a[k].harm<=j)continue; remain_health = i-(a[k].harm-j); remain_health = max((long long)0, remain_health); new_cost = a[k].cost+amap[remain_health][j]; if(amap[i][j]>=0)amap[i][j]=min(new_cost, amap[i][j]); else amap[i][j]=new_cost; } } } // attack long long sum=0; for(int i=0;i!=n;i++) sum+=amap[ms[i].health][ms[i].defence]; return sum; } int main() { //freopen("in.txt", "r", stdin); while(~scanf("%d %d", &n, &m)) { memset(amap, -1, sizeof(amap)); maxa=0; maxh=0; maxd=0; for(int i=0;i