#include <bits/stdc++.h>
using namespace std;
const int maxn = 2 * 1000 * 1000;
int n;
long long int a, b;
long long int v[maxn];
struct ghost {
  long long int x;
  long long int vx;
  long long int vy;
  long long int number;
  void set() { number = vx * a * (-1) + vy; }
  bool operator<(const ghost& g) const { return number < g.number; }
  bool operator==(const ghost& g) const { return number == g.number; }
};
ghost g[maxn];
void read();
void initialize();
long long int ans();
long long int f(int, int);
int main() {
  read();
  initialize();
  sort(g, g + n);
  cout << ans() << endl;
  return 0;
}
void read() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> a >> b;
  for (int i = 0; i < n; i++) cin >> g[i].x >> g[i].vx >> g[i].vy;
}
void initialize() {
  for (int i = 0; i < n; i++) g[i].set();
}
long long int ans() {
  long long int res = 0;
  long long int c = 1;
  for (int i = 1; i < n; i++) {
    if (g[i] == g[i - 1])
      c++;
    else {
      res += f(i - c, i - 1);
      c = 1;
    }
  }
  res += f(n - c, n - 1);
  return res * 2;
}
long long int f(int l, int r) {
  long long int size = r - l + 1;
  for (int i = 0; i < size; i++) v[i] = g[i + l].vx;
  sort(v, v + size);
  long long int all = size * (size - 1) / 2;
  long long int c = 1;
  long long int bad = 0;
  for (int i = 1; i < size; i++) {
    if (v[i] == v[i - 1])
      c++;
    else {
      bad += c * (c - 1) / 2;
      c = 1;
    }
  }
  bad += c * (c - 1) / 2;
  return all - bad;
}
