#include #include #include #include #include #include #include using namespace std; const int N=5E5+5; const int M=1E6+5; struct map{ int x,p; }f[2][N]; int n,m,a[N],b[N],c[N],p[2],T,g[2],ans,sum,k; bool o[N]; int comp(const map&a,const map&b) { return a.x>T; while (T--) { cin>>n>>m; for (int i=1;i<=n;i++) { scanf("%d%d",&a[i],&b[i]); } for (int i=1;i<=m;i++) scanf("%d",&c[i]); sort(c+1,c+m+1); g[0]=g[1]=k=1; p[0]=p[1]=sum=ans=0; memset(o,0,sizeof(o)); for (int i=1;i<=n;i++) { b[i]-=sum; f[a[i]][++p[a[i]]].x=b[i]; f[a[i]][p[a[i]]].p=i; for (;k<=m&&c[k]==i;k++) sum++; } sort(f[0]+1,f[0]+p[0]+1,comp); sort(f[1]+1,f[1]+p[1]+1,comp); for (int i=n;i;i--)// if (!o[i]) { k=a[i]^1; if (!o[i]) ans++; for (;g[k]<=p[k]&&f[k][g[k]].x