#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const int MOD = 1e9 + 7;
const int MAXN = 1e6 + 3;
struct Rcompare {
  bool operator()(pair<int, int> lhs, pair<int, int> rhs) {
    return lhs.first > rhs.first;
  }
};
struct compare {
  bool operator()(pair<int, int> lhs, pair<int, int> rhs) {
    return lhs.first < rhs.first;
  }
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long n, m, a, d;
  cin >> n >> m >> a >> d;
  long long t[m];
  for (int i = 0; i < (m); ++i) cin >> t[i];
  sort(t, t + m);
  long long max = (d / a) + 1;
  long long tm = 0;
  long long typ1 = 0;
  long long ans = 0;
  for (int i = 0; i < (m); ++i) {
    if (t[i] <= tm) {
      continue;
    }
    if ((tm / a) * a + a >= t[i]) {
      ans++;
      tm = t[i] + d;
      typ1 = min(n, tm / a);
      continue;
    } else if (t[i] / a > n && typ1 != n) {
      long long typ2 = n - typ1;
      ans += typ2 / max;
      ans += (typ2 % max ? 1 : 0);
      long long mm = n - typ2 % max + 1;
      tm = mm * a + d;
      typ1 = n;
      i--;
      continue;
    }
    long long typ2 = min(n, t[i] / a);
    if ((typ2 - typ1) % max != 0) {
      continue;
    } else {
      if ((typ2 - max + 1) * a + d >= t[i]) {
        continue;
      }
      ans += (typ2 - typ1) / max;
      tm = t[i] + d;
      ans++;
      typ1 = min(n, tm / a);
    }
  }
  if (typ1 != n) {
    long long typ2 = n - typ1;
    ans += typ2 / max;
    ans += (typ2 % max ? 1 : 0);
  }
  cout << ans;
  return 0;
}
