#include <bits/stdc++.h>
using namespace std;
long long N, L, W;
vector<long long> pos;
deque<long long> dq;
bool goodp(long long l, long long r) {
  long long x = (l + r) / 2;
  long long y = x - l;
  return abs(x) < y * W;
}
bool good(long long l, long long r) {
  return goodp(l, r) || goodp(l + L, r) || goodp(l, r + L) ||
         goodp(l + L, r + L);
}
int main() {
  cin.tie(0);
  cin.sync_with_stdio(0);
  cin >> N >> L >> W;
  L *= 2;
  while (N--) {
    long long x, v;
    cin >> x >> v;
    x *= 2;
    if (v == 1) {
      pos.push_back(x);
    } else {
      dq.push_back(x);
    }
  }
  sort((pos).begin(), (pos).end());
  sort((dq).begin(), (dq).end());
  long long ans = 0;
  for (long long i : pos) {
    while (!dq.empty() && !good(i, dq.front())) {
      dq.pop_front();
    }
    while (!dq.empty() && !good(i, dq.back())) {
      dq.pop_back();
    }
    ans += dq.size();
  }
  cout << ans;
}
