#include <bits/stdc++.h>
using namespace std;
const int kMaxN = 3e5 + 10;
long long nextMultiple(long long d, long long after) {
  return (after / d + 1) * d;
}
long long lastMultiple(long long d, long long before) { return before / d * d; }
void Solve() {
  long long n, m, a, d;
  scanf("%lld %lld %lld %lld", &n, &m, &a, &d);
  vector<long long> t(m + 1);
  for (int i = 1; i <= m; ++i) {
    scanf("%lld", &t[i]);
  }
  long long cnt = 0;
  long long lastOpened = -d;
  long long covers = d / a + 1;
  auto FastForward = [&](long long t) {
    if (lastOpened + d < n * a) {
      long long first = nextMultiple(a, lastOpened + d);
      long long last = min(n * a, lastMultiple(a, t));
      long long emps = (last - first) / a + 1;
      if (emps) {
        cnt += emps / covers + (emps % covers ? 1 : 0);
        if (emps % covers) {
          lastOpened = first + (emps / covers) * covers * a;
        } else {
          lastOpened = first + (emps / covers - 1) * covers * a;
        }
      }
    }
  };
  for (int i = 1; i <= m; ++i) {
    if (t[i] <= lastOpened + d) {
      continue;
    }
    FastForward(t[i]);
    if (t[i] <= lastOpened + d) continue;
    lastOpened = t[i];
    cnt += 1;
  }
  FastForward(n * a);
  cout << cnt << "\n";
}
int main() {
  int tests = 1;
  for (; tests; --tests) {
    Solve();
  }
}
