#include <bits/stdc++.h>
using namespace std;
template <typename T>
void printvec(vector<T>& vec) {
  for (int i = 0; i < vec.size(); i++) {
    cout << vec[i] << " ";
  }
  cout << endl;
}
map<long long int, vector<long long int> > mymap;
int main() {
  ios_base::sync_with_stdio(false);
  long long int n, x, k;
  cin >> n >> x >> k;
  vector<long long int> inp;
  long long int tot = 0;
  long long int num = 0;
  for (int i = 0; i < n; i++) {
    long long int a;
    cin >> a;
    inp.push_back(a);
  }
  sort(inp.begin(), inp.end());
  for (int i = 0; i < n; i++) {
    long long int a = inp[i];
    long long int y = a / x;
    mymap[y - k + 1].push_back(a);
  }
  long long int ans = 0;
  for (int i = 0; i < n; i++) {
    long long int b = inp[i];
    long long int a = (long long int)(ceil(b / (double)x));
    if (mymap.find(a) == mymap.end()) {
      ans += 0;
    } else {
      vector<long long int>::iterator itlow;
      itlow = lower_bound(mymap[a].begin(), mymap[a].end(), b);
      long long int p = itlow - mymap[a].begin();
      long long int q = mymap[a].size() - 1;
      ans += (q - p + 1);
    }
  }
  cout << ans << "\n";
}
