/* *Rainto96 *Beijing University of Posts and Telecommunications School of Software Engineering *http://blog.csdn.net/u011775691 */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define pb push_back #define ALL(x) x.begin(),x.end() #define VINT vector #define PII pair #define MP(x,y) make_pair((x),(y)) #define ll long long #define ull unsigned ll #define MEM0(x) memset(x,0,sizeof(x)) #define MEM(x,val) memset((x),val,sizeof(x)) #define scan(x) scanf("%d",&(x)) #define scan2(x,y) scanf("%d%d",&(x),&(y)) #define scan3(x,y,z) scanf("%d%d%d",&(x),&(y),&(z)) #define scan4(x,y,z,k) scanf("%d%d%d%d",&(x),&(y),&(z),&(k)) #define Max(a,b) a=max(a,b) #define Min(a,b) a=min(a,b) using namespace std; const int MAXN = 50555; int a[MAXN ] , b[MAXN] , t[MAXN]; set st[2]; bool hasHigher(int kind , int num){ return st[kind].upper_bound(num) != st[kind].end(); } int main(){ #ifndef ONLINE_JUDGE //freopen("C:/OJ/in.txt","r",stdin); #endif int T; scan(T); while(T--){ st[0].clear(); st[1].clear(); int n,m; scan2(n,m); for(int i=1;i<=n;i++){ scan2(a[i] , b[i]); } for(int i=1;i<=m;i++) scan(t[i]); sort(t+1,t+m+1); int del = 0; int tail = m; int res = n; for(int i = n ;i >= 1; i--){ while(tail>=1 && i <= t[tail]) del++ , tail--; int nowp = del + b[i]; int kind = a[i]; bool you = hasHigher(kind^1 , nowp); if(you) res--; st[kind].insert(nowp); } printf("%d\n",res); } return 0; }