#include <bits/stdc++.h>
using namespace std;
const long long INF = 2147483647;
const long long LLINF = (1LL << 62) - 1 + (1LL << 62);
const double PI = acos(-1.0);
const bool LOG = false;
void Log() {
  if (LOG) cerr << "\n\n";
}
template <class T, class... S>
void Log(T t, S... s) {
  if (LOG) cerr << t << "\t", Log(s...);
}
template <class T>
using min_queue = priority_queue<T, vector<T>, greater<T>>;
const long long maxm = 1e5;
long long N, M, A, D, T[maxm];
long long tc = 0, ans = 0;
void update(long long t) {
  long long cj = max(1LL, (long long)((tc + A) / A));
  long long ck = min((long long)(t / A), N);
  long long len = ck - cj + 1;
  if (len <= 0) return;
  long long first = 1 + (long long)(D / A);
  ans += (long long)(len + first - 1) / first;
  long long cl = ck - ((ck - cj) % first);
  tc = A * (cl) + D;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cerr << boolalpha;
  (cout << fixed).precision(20);
  cin >> N >> M >> A >> D;
  for (long long i = 0; i < M; i++) cin >> T[i];
  for (long long i = 0; i < M; i++) {
    update(T[i]);
    if (T[i] <= tc) {
    } else {
      ans++;
      tc = T[i] + D;
    }
  }
  update(N * A);
  cout << ans << endl;
  return 0;
}
