#include <bits/stdc++.h>
using namespace std;
struct ghost {
  long long vx, vy;
  long long magic;
  ghost(long long x, long long y, long long a)
      : vx(x), vy(y), magic((long long)a * x - y) {}
};
bool cmp1(const ghost& x, const ghost& y) { return x.magic < y.magic; }
bool cmp2(const ghost& x, const ghost& y) { return x.vx < y.vx; }
vector<ghost> G;
int main() {
  long long n, a, b;
  cin >> n >> a >> b;
  for (long long i = 0; i < n; i++) {
    long long x, vx, vy;
    cin >> x >> vx >> vy;
    ghost tmp(vx, vy, a);
    G.push_back(tmp);
  }
  stable_sort(G.begin(), G.end(), cmp2);
  stable_sort(G.begin(), G.end(), cmp1);
  long long res = 0;
  long long t_m = G[0].magic;
  long long t_b = 0;
  for (long long i = 0; i < G.size(); i++) {
    if (G[i].magic != t_m) {
      if (i - t_b > 1) {
        res += ((i - t_b) * (i - t_b - 1));
        long long t_vx = G[t_b].vx;
        long long tt_b = t_b;
        for (long long k = tt_b; k < i; k++) {
          if (G[k].vx != t_vx) {
            res -= ((k - tt_b) * (k - tt_b - 1));
            tt_b = k;
            t_vx = G[k].vx;
          }
        }
        res -= (i - tt_b) * (i - tt_b - 1);
      }
      t_b = i;
      t_m = G[i].magic;
    }
  }
  res += ((n - t_b) * (n - t_b - 1));
  long long t_vx = G[t_b].vx;
  long long tt_b = t_b;
  for (long long k = tt_b; k < n; k++) {
    if (G[k].vx != t_vx) {
      res -= ((k - tt_b) * (k - tt_b - 1));
      tt_b = k;
      t_vx = G[k].vx;
    }
  }
  res -= (n - tt_b) * (n - tt_b - 1);
  cout << res;
  return 0;
}
