#include using namespace std; const int MAXN = (int) 1e5 + 10; int w[MAXN], b[MAXN]; int main() { int T; scanf("%d", &T); assert(T >= 1 && T <= 10); while (T--) { int n, minX, maxX; scanf("%d %d %d", &n, &minX, &maxX); assert(n >= 1 && n <= (int) 1e5); assert(minX >= 1 && minX <= (int) 1e9 && maxX >= minX && maxX <= (int) 1e9); for (int i = 0; i < n; i++) { scanf("%d %d", &w[i], &b[i]); assert(w[i] >= 0 && w[i] <= (int) 1e9); assert(b[i] >= 0 && b[i] <= (int) 1e9); } vector val(2); for (int x = 0; x <= 1; x++) { int res = x; for (int i = 0; i < n; i++) { res = (res * w[i] + b[i]) % 2; } val[x] = res; } int even = 0; if (val[minX % 2] == 0) { even += (maxX - minX) / 2 + 1; } if (val[(minX + 1) % 2] == 0) { even += (maxX - minX - 1) / 2 + 1; } int odd = maxX - minX + 1 - even; assert(even >= 0 && even <= maxX - minX + 1); assert(odd >= 0 && odd <= maxX - minX + 1); printf("%d %d\n", even, odd); } return 0; }