#include<bits/stdc++.h>
using namespace std;
int t,v[1000005],a[1000005],m;
float d[100005],p[100005];
float n,l,vm;
struct pb{
float d,v,a;
}ia[100005];
bool cmp(const pb s1,const pb s2){
return s1.d>s2.d;
}
int main(){
ios::sync_with_stdio(false);
cin>>t;
while(t--){
memset(p,0,sizeof(p));
memset(d,0,sizeof(d));
memset(v,0,sizeof(v));
memset(a,0,sizeof(a));
memset(ia,0,sizeof(ia));
cin>>n>>m>>l>>vm;
int y=0,r=0,sum=0,mi=0,sp1=m;
for(int i=1;i<=n;i++){
int d1,a1,v1;
cin>>d1>>v1>>a1;
if(a1>=0){
d[r]=d1,v[r]=v1,a[r]=a1;
r++;
continue;
}
ia[y].d=d1,ia[y].v=v1,ia[y].a=a1;
y++;
}
for(int i=1;i<=m;i++)cin>>p[i];
for(int i=0;i<r;i++){
if(d[i]>p[m]) continue;
if(a[i]==0){
if(v[i]<=vm) continue;
sum++,mi=1;
continue;
}
float sx=sqrt(v[i]*v[i]+2*a[i]*(p[m]-d[i]));
if(sx<=vm) continue;
sum++,mi=1;
}
sort(ia,ia+y,cmp);
for(int i=0;i<y;i++){
if(ia[i].d>p[m]) i++;
int u=lower_bound(p+1,p+m+1,ia[i].d)-p;
float wu=ia[i].v*ia[i].v+2*ia[i].a*(p[u]-ia[i].d);
float wu2=ia[i].v*ia[i].v+2*ia[i].a*(p[sp1]-ia[i].d);
if(wu<0) continue;
float sx=sqrt(wu);
if(sx<=vm) continue;
sum++;
if(wu2<0){
mi++;
sp1=u;
continue;
}
float sx2=sqrt(wu2);
if(sx2<=vm){
mi++;
sp1=u;
}
}
cout<<sum<<' '<<m-mi<<endl;
}
return 0;
}