#include <bits/stdc++.h>
using namespace std;
long long doorOpens(long long n, long long a, const vector<long long> &t,
                    long long d) {
  long long lastEmployeeIndex = 0, lastClientIndex = -1, totalOpenedDoors = 0;
  bool thereAreClientsLeft = true;
  while (thereAreClientsLeft) {
    long long nextClientTime = t[lastClientIndex + 1];
    long long nextEmployeeTime = LLONG_MAX;
    if (lastEmployeeIndex + 1 <= n) {
      nextEmployeeTime = (lastEmployeeIndex + 1) * a;
    }
    long long doorOpenTime = min(nextClientTime, nextEmployeeTime);
    long long doorCloseTime = doorOpenTime + d;
    if (nextClientTime - doorCloseTime <= d) {
      totalOpenedDoors++;
      while (lastClientIndex < (long long)t.size() &&
             t[lastClientIndex + 1] <= doorCloseTime) {
        lastClientIndex++;
      }
      lastEmployeeIndex = min(doorCloseTime / a, n);
    } else {
      long long k = 1 + d / a;
      long long nextEmployeeIndex = min((nextClientTime - d - 1) / a, n);
      long long doorOpened = (nextEmployeeIndex - lastEmployeeIndex) / k;
      totalOpenedDoors += doorOpened;
      if (nextEmployeeIndex == n &&
          (nextEmployeeIndex - lastEmployeeIndex) % k != 0) {
        totalOpenedDoors++;
        lastEmployeeIndex = n;
      } else {
        lastEmployeeIndex += doorOpened * k;
      }
    }
    thereAreClientsLeft = lastClientIndex + 1 < t.size();
  }
  if (lastEmployeeIndex != n) {
    long long k = 1 + d / a;
    totalOpenedDoors += (n - lastEmployeeIndex) / k;
    if ((n - lastEmployeeIndex) % k != 0) {
      totalOpenedDoors++;
    }
  }
  return totalOpenedDoors;
}
int main() {
  ios_base::sync_with_stdio(false);
  long long n, m, a, d;
  cin >> n >> m >> a >> d;
  vector<long long> t(m);
  for (int i = 0; i < m; i++) {
    cin >> t[i];
  }
  cout << doorOpens(n, a, t, d) << endl;
  return 0;
}
