#include <bits/stdc++.h>
using namespace std;
int a[110000], b[110000];
struct Node {
  int a, b;
} node[110000];
int main() {
  int i, j, h;
  int n, m, T;
  int cas = 1;
  int x, y;
  while (scanf("%d%d%d%d", &n, &m, &x, &y) != EOF) {
    for (i = 1; i <= n; i++) {
      scanf("%d", &a[i]);
    }
    for (j = 1; j <= m; j++) {
      scanf("%d", &b[j]);
    }
    int k = 0;
    for (i = 1, j = 1; i <= n && j <= m; i++) {
      if (b[j] - y > a[i]) continue;
      while (b[j] + x < a[i] && j <= m) {
        j++;
      }
      if (j > m) break;
      if (b[j] - y <= a[i]) {
        k++;
        node[k].a = i;
        node[k].b = j;
        j++;
      }
    }
    printf("%d\n", k);
    for (i = 1; i <= k; i++) {
      printf("%d %d\n", node[i].a, node[i].b);
    }
  }
  return 0;
}
