#include<bits/stdc++.h>
using namespace std;
int n,m,vi;
struct node{
int id,x,y,val;
double xt;
}a;
long long tot,ans;
node k[500005];//最后造成伤害
int s[500005],z[500005];//威力
unordered_map<int,vector<node>>q;
unordered_map<int,vector<node>>::iterator it;
int ping(int x,int y,int v)
{ double xi;
return xi=x+v*sqrt((2*y)/9.8);
//else return xi=-(x+v*sqrt((2*y)/9.8));
}
bool pan(node a,node b){
if(a.x<=b.x&&a.xt>=b.xt)return true;
else return false;
}
bool cmp(node a,node b){
return a.id<b.id;
}
bool cmp2(int a,int b){
return a>b;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{ a.id=1;
cin>>a.x>>a.y>>vi;
a.xt=ping(a.x,a.y,vi);
q[a.y].push_back(a);
}
for(it=q.begin();it!=q.end();it++)
{
for(int i=0;i<it->second.size();i++)
for(int j=i;j<it->second.size();j++)
{
if(i==j)continue;
if(pan(it->second[i],it->second[j]))
{
it->second[i].val++;
it->second[j].val++;
}
}
}
for(it=q.begin();it!=q.end();it++)
{
for(int i=0;i<it->second.size();i++)
{ tot++;
k[tot].id=it->second[i].id;
k[tot].val=it->second[i].val;
ans+=it->second[i].val;
}
}
sort(k+1,k+1+n,cmp);
for(int i=1;i<=n;i++)
{
cin>>s[i];
z[i]=k[i].val-s[i];
if(z[i]<0)z[i]=k[i].val;
else z[i]=s[i];
}
sort(z+1,z+1+n,cmp2);
//int tp=0;
//cout<<ans<<endl;
for(int i=1;i<=m;i++)
ans-=z[i];
cout<<ans<<endl;
return 0;
}
第三个点就G了,求助