rt,大概是精度问题
#include<bits/stdc++.h>
#define eps 0.000000001
#define int long long
using namespace std;
struct node{
double l,r;
}c[100010];
double pos[100010];
int del[100010],chao[100010],used[100010];
bool cmp(node a,node b){
if(a.l==b.l)return a.r<b.r;
return a.l<b.l;
}
main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--){
memset(pos,0,sizeof(pos));
memset(del,0,sizeof(del));
memset(chao,0,sizeof(chao));
memset(used,0,sizeof(used));
int n,m;
double len,v,d,sp,a;
cin>>n>>m>>len>>v;
for(int i=1;i<=n;i++){
cin>>d>>sp>>a;
if(sp>v&&a>0)c[i].l=d,c[i].r=len;
else if(sp>v&&a<0)c[i].l=d,c[i].r=min(len,d+(v*v-sp*sp)/2.0/a-eps);
else if(sp<=v&&a>0)c[i].l=min(len,(d+(v*v-sp*sp)/2.0/a)+eps),c[i].r=len+eps;
else if(a==0){
if(sp<=v)c[i].l=-100,c[i].r=-100;
else c[i].l=d,c[i].r=len+eps;
}
else c[i].l=-1,c[i].r=-1;
// cout<<c[i].l<<' '<<c[i].r<<endl;
}
for(int i=1;i<=m;i++)cin>>pos[i];
sort(c+1,c+n+1,cmp);
// for(int i=1;i<=n;i++){
// cout<<c[i].l<<' '<<c[i].r<<endl;
// }
int now=1,ans=0,ans2=0;
for(int i=1;i<=n;i++){
while(pos[now]<c[i].l&&now<=m)now++;
if(now>m)break;
if(c[i].r>=pos[now]){
ans++;
chao[i]=1;
}
}
cout<<ans<<' ';
double minr=len+100;
for(int i=n;i>=1;i--){
if(c[i].r>=minr)del[i]=1;
if(chao[i]==1)minr=min(minr,c[i].r);
// cout<<"del["<<i<<"] ="<<del[i]<<endl;
// cout<<minr<<' '<<i<<' '<<chao[i]<<endl;
}
now=1;
int lst=0;
for(int i=1;i<=n;i++){
if(del[i]==1||chao[i]==0)continue;
if(pos[used[lst]]>=c[i].l&&pos[used[lst]]<=c[i].r){
used[i]=used[lst];
lst=i;
continue;
}
while(pos[now]<=c[i].r&&now<=m)now++;
used[i]=--now;
ans2++;
// cout<<now<<' ';
lst=i;
// cout<<endl<<i<<' '<<used[i]<<endl;
}
cout<<m-ans2<<'\n';
}
return 0;
}