#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int MAXlen = 2e5 + 10;
double eps = 1e-4;
vector<long long> hh;
vector<long long> sorted;
int main() {
  long long n, m, i, j, h, k;
  scanf("%lld %lld %lld %lld", &n, &h, &m, &k);
  for (i = 0; i < n; i++) {
    long long xx, yy;
    scanf("%lld %lld", &xx, &yy);
    hh.push_back((xx * m + yy) % (m / 2));
    sorted.push_back(hh[i]);
  }
  sort(sorted.begin(), sorted.end());
  long long ans = 0x3f3f3f3f3f3f3f3f;
  long long bestt = 0;
  for (i = 0; i < sorted.size(); i++) {
    if (sorted[i] + k < m / 2) {
      j = lower_bound(sorted.begin(), sorted.end(), sorted[i] + k) -
          sorted.begin();
      long long cnt = j - i - 1;
      if (cnt < ans) {
        ans = cnt;
        bestt = sorted[i];
      }
    } else {
      j = lower_bound(sorted.begin(), sorted.end(), sorted[i] + k - m / 2) -
          sorted.begin();
      long long cnt = (int)sorted.size() - i + j - 1;
      if (cnt < ans) {
        ans = cnt;
        bestt = sorted[i];
      }
    }
  }
  printf("%lld %lld\n", ans, (bestt + k) % (m / 2));
  if (!ans) return 0;
  long long t = bestt;
  for (j = 0; j < hh.size(); j++) {
    long long x = hh[j];
    if (t + k > m / 2) {
      if (x > t || x < t + k - m / 2) {
        printf("%lld ", j + 1);
      }
    } else {
      if (x > t && x < t + k) {
        printf("%lld ", j + 1);
      }
    }
  }
  return 0;
}
