rrrrtttt.
求求求求条条条条
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x=0,c=getchar(),f=0;
for(;c>'9'||c<'0';f=c=='-',c=getchar());
for(;c>='0'&&c<='9';c=getchar())
x=(x<<1)+(x<<3)+(c^48);
return f?-x:x;
}
inline void write(int x)
{
if(x<0) x=-x,putchar('-');
if(x>9) write(x/10);
putchar(x%10+'0');
}
const int N=1<<20;
int n,m,L,V;
struct Node{
int d,v,a;
}a[N];
int p[N];
struct Ans{
int l,r;
}ans[N];
int cnt=0;
void solve(Node nw)
{
int d=nw.d,v=nw.v,a=nw.a;
if(a==0)
{
if(v>V&&d<=p[m])
{
int nw=0;
for(int k=18;k>=0;k--)
{
int to=nw+(1<<k);
if(to>m) continue;
if(p[to]<d) nw=to;
}
nw++;
ans[++cnt]={nw,m};
}
return;
}
long double dis=V*V-v*v;
// cout<<"d="<<d<<" dis="<<dis<<" ";
dis/=2*a;
double eps=1e-10;
// cout<<"d="<<d<<" dis="<<dis<<" ";
if(a<0&&dis<eps) return;
if(a>0&&dis<eps) dis=0;
// if(dis<0) return;
// double to=d+dis;
dis+=d;
// cout<<dis<<"\n";
if(a>0)
{
int nw=0;
for(int k=18;k>=0;k--)
{
int to=nw+(1<<k);
if(to>m) continue;
if(p[to]<=dis+eps) nw=to;
}
nw++;
if(nw>m||p[nw]<=dis+eps) return;
ans[++cnt]={nw,m};
// to=ceil(to);
// if(to>)
// int to=query()
// ans[++cnt]={}
}
if(a<0)
{
int nw=0;
for(int k=18;k>=0;k--)
{
int to=nw+(1<<k);
if(to>m) continue;
if(p[to]<dis) nw=to;
}
// if(nw==0) return;
int nw1=0;
for(int k=18;k>=0;k--)
{
int to=nw1+(1<<k);
if(to>m) continue;
if(p[to]<d) nw1=to;
}
nw1++;
if(nw1>nw) return;
ans[++cnt]={nw1,nw};
}
// cerr<<"nalbag;l'a";
}
bool cmp(Ans x,Ans y)
{
return x.r<y.r;
}
void solve()
{
cnt=0;
n=read();
m=read();
L=read();
V=read();
for(int i=1;i<=n;i++)
{
int d=read(),v=read(),aa=read();
// cout<<d<<" "<<v<<" "<<aa<<" \n";
a[i]={d,v,aa};
}
// return;
for(int i=1;i<=m;i++)
{
p[i]=read();
// cerr<<"i="<<i<<" p[i]="<<p[i]<<"\n";
}
sort(p+1,p+1+m);
for(int i=1;i<=n;i++)
{
int nw=cnt;
solve(a[i]);
// if(nw!=cnt) cout<<"i="<<i<<" "<<"["<<ans[cnt].l<<","<<ans[cnt].r<<"]\n";
}
cout<<cnt<<" ";
sort(ans+1,ans+1+cnt,cmp);
int nw=0,r=0;
for(int i=1;i<=cnt;i++)
{
// cout<<ans[i].l<<" "<<ans[i].r<<"\n";
if(r>=ans[i].l) continue;
nw++;
r=ans[i].r;
}
cout<<m-nw<<"\n";
// for(int i=1;i<=cnt;i++)
}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
#endif
int T=read();
while(T--) solve();
//mt19937_64 myrand(time(0));
return 0;
}