要寄了,本来以为能拿60pts,实际上只能拿40pts
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,m,L,V,b[N];
int d[N],a[N],v[N];
bool tag[3001][3001];
int cnt[3001],ans1,ans2;
long double gets(int i,int s){
return sqrt(v[i]*v[i]+2*a[i]*(s-d[i]));
}
void Onm(){
ans1=0,ans2=m;
memset(cnt,0,sizeof(cnt));
memset(tag,0,sizeof(tag));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(d[i]<=b[j]&&gets(i,b[j])>V){
cnt[i]++;
tag[i][j]=1;
}
for(int i=1;i<=n;i++)if(cnt[i])ans1++;
for(int j=1;j<=m;j++){
int flag=1;
for(int i=1;i<=n;i++)
if(tag[i][j]==1&&cnt[i]==1){
flag=0;
ans2--;
break;
}
if(flag==1){
for(int i=1;i<=n;i++)
if(tag[i][j]==1)cnt[i]--;
}
}cout<<ans1<<" "<<ans2<<"\n";
}
void solve(){
cin>>n>>m>>L>>V;
for(int i=1;i<=n;i++)
cin>>d[i]>>v[i]>>a[i];
for(int i=1;i<=m;i++)
cin>>b[i];
if(n<=3000)Onm();
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--)solve();
return 0;
}