#include #include #include #include #include using namespace std; priority_queue,greater >Q[10]; struct node { int x,y; }; node a[50010]; int hash[50010]; int main() { int tot; cin>>tot; while(tot--) { int n,m,sum=0; memset(hash,0,sizeof(hash)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y); for(int i=1;i<=m;i++) { int s; scanf("%d",&s); hash[s]++; } for(int i=1;i<=n;i++) { int s1,s2; if(a[i].x==0)s1=1,s2=0; else s1=0,s2=1; if(!Q[s1].empty()) { int p=Q[s1].top(); while(Q[s1].size()>0&&a[i].y-sum>p) { Q[s1].pop(); p=Q[s1].top(); } } Q[s2].push(a[i].y-sum); if(hash[i])sum+=hash[i]; } printf("%d\n",Q[0].size()+Q[1].size()); while(!Q[0].empty())Q[0].pop(); while(!Q[1].empty())Q[1].pop(); } return 0; }