#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <utility>
#include <cmath>
#include <queue>
using namespace std;
#define in cin
#define out cout
#define X first
#define Y second
class BIT
{
private:
int sz;
vector<int> vec;
public:
BIT(int n)
{
sz = 1; while(sz < n) sz *= 2;
vec.resize(sz*2+1, 0);
}
void upd(int id)
{
id += sz-1;
while(id)
{
vec[id]++;
id /= 2;
}
}
int get(int s, int e)
{
s += sz-1; e += sz-1;
int ret = 0;
while(s<=e)
{
if(s % 2 == 1) ret += vec[s];
if(e % 2 == 0) ret += vec[e];
s++; s /= 2;
e--; e /= 2;
}
return ret;
}
};
int main()
{
int tc; in >> tc;
while(tc--)
{
//input
int n; double p, q; in >> n >> p >> q;
vector< pair<double, double> > stars;
for(int i=1; i<=n; i++)
{
double x, y; in >> x >> y;
stars.push_back({x,y});
}
//tan
vector< pair<double, int> > tan_p; //first for tan, second for id
for(int i=1; i<=n; i++) {
tan_p.push_back({atan2(stars[i-1].Y,stars[i-1].X-p), i});
} sort(tan_p.begin(), tan_p.end());
int P[111111];
for(int i=1; i<=n; i++) P[i] = tan_p[i-1].Y;
vector< pair<double, int> > tan_q;
for(int i=1; i<=n; i++) {
tan_q.push_back({atan2(stars[i-1].Y,stars[i-1].X-q), i});
} sort(tan_q.begin(), tan_q.end());
int Qt[111111];
int Q[111111];
for(int i=1; i<=n; i++) Qt[i] = tan_q[i-1].Y;
for(int i=1; i<=n; i++) Q[Qt[i]] = i;
BIT BIT_(n);
long long res = 0;
for(int i=1; i<=n; i++)
{
int t = Q[P[i]];
int sum = BIT_.get(t, n); res += sum;
BIT_.upd(t);
}
out << res << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGluIGNpbgojZGVmaW5lIG91dCBjb3V0CiNkZWZpbmUgWCBmaXJzdAojZGVmaW5lIFkgc2Vjb25kCgpjbGFzcyBCSVQKewpwcml2YXRlOgogICAgaW50IHN6OwogICAgdmVjdG9yPGludD4gdmVjOwoKcHVibGljOgogICAgQklUKGludCBuKQogICAgewogICAgICAgIHN6ID0gMTsgd2hpbGUoc3ogPCBuKSBzeiAqPSAyOwogICAgICAgIHZlYy5yZXNpemUoc3oqMisxLCAwKTsKICAgIH0KCiAgICB2b2lkIHVwZChpbnQgaWQpCiAgICB7CiAgICAgICAgaWQgKz0gc3otMTsKICAgICAgICB3aGlsZShpZCkKICAgICAgICB7CiAgICAgICAgICAgIHZlY1tpZF0rKzsKICAgICAgICAgICAgaWQgLz0gMjsKICAgICAgICB9CiAgICB9CgogICAgaW50IGdldChpbnQgcywgaW50IGUpCiAgICB7CiAgICAgICAgcyArPSBzei0xOyBlICs9IHN6LTE7CgogICAgICAgIGludCByZXQgPSAwOwogICAgICAgIHdoaWxlKHM8PWUpCiAgICAgICAgewogICAgICAgICAgICBpZihzICUgMiA9PSAxKSByZXQgKz0gdmVjW3NdOwogICAgICAgICAgICBpZihlICUgMiA9PSAwKSByZXQgKz0gdmVjW2VdOwogICAgICAgICAgICBzKys7IHMgLz0gMjsKICAgICAgICAgICAgZS0tOyBlIC89IDI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmV0OwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBpbnQgdGM7IGluID4+IHRjOwogICAgd2hpbGUodGMtLSkKICAgIHsKICAgICAgICAvL2lucHV0CiAgICAgICAgaW50IG47IGRvdWJsZSBwLCBxOyBpbiA+PiBuID4+IHAgPj4gcTsKICAgICAgICB2ZWN0b3I8IHBhaXI8ZG91YmxlLCBkb3VibGU+ID4gc3RhcnM7CiAgICAgICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGRvdWJsZSB4LCB5OyBpbiA+PiB4ID4+IHk7CiAgICAgICAgICAgIHN0YXJzLnB1c2hfYmFjayh7eCx5fSk7CiAgICAgICAgfQoKICAgICAgICAvL3RhbgogICAgICAgIHZlY3RvcjwgcGFpcjxkb3VibGUsIGludD4gPiB0YW5fcDsgLy9maXJzdCBmb3IgdGFuLCBzZWNvbmQgZm9yIGlkCiAgICAgICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykgewogICAgICAgICAgICB0YW5fcC5wdXNoX2JhY2soe2F0YW4yKHN0YXJzW2ktMV0uWSxzdGFyc1tpLTFdLlgtcCksIGl9KTsKICAgICAgICB9IHNvcnQodGFuX3AuYmVnaW4oKSwgdGFuX3AuZW5kKCkpOwoKICAgICAgICBpbnQgUFsxMTExMTFdOwogICAgICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspIFBbaV0gPSB0YW5fcFtpLTFdLlk7CgogICAgICAgIHZlY3RvcjwgcGFpcjxkb3VibGUsIGludD4gPiB0YW5fcTsKICAgICAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKSB7CiAgICAgICAgICAgIHRhbl9xLnB1c2hfYmFjayh7YXRhbjIoc3RhcnNbaS0xXS5ZLHN0YXJzW2ktMV0uWC1xKSwgaX0pOwogICAgICAgIH0gc29ydCh0YW5fcS5iZWdpbigpLCB0YW5fcS5lbmQoKSk7CgogICAgICAgIGludCBRdFsxMTExMTFdOwogICAgICAgIGludCBRWzExMTExMV07CiAgICAgICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykgUXRbaV0gPSB0YW5fcVtpLTFdLlk7CiAgICAgICAgZm9yKGludCBpPTE7IGk8PW47IGkrKykgUVtRdFtpXV0gPSBpOwoKICAgICAgICBCSVQgQklUXyhuKTsKICAgICAgICBsb25nIGxvbmcgcmVzID0gMDsKICAgICAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHQgPSBRW1BbaV1dOwogICAgICAgICAgICBpbnQgc3VtID0gQklUXy5nZXQodCwgbik7IHJlcyArPSBzdW07CiAgICAgICAgICAgIEJJVF8udXBkKHQpOwogICAgICAgIH0KCiAgICAgICAgb3V0IDw8IHJlcyA8PCBlbmRsOwogICAgfQoKCiAgICByZXR1cm4gMDsKfQ==