#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, y;
} fei1[60], fei2[60];
int _hash[5100];
int main() {
  int p, q, l, r, i, t, j, x, k;
  scanf("%d%d%d%d", &p, &q, &l, &r);
  for (i = 0; i < p; i++) {
    scanf("%d%d", &fei1[i].x, &fei1[i].y);
  }
  for (i = 0; i < q; i++) {
    scanf("%d%d", &fei2[i].x, &fei2[i].y);
  }
  x = 0;
  for (i = l; i <= r; i++) {
    memset(_hash, 0, sizeof(_hash));
    for (j = 0; j < p; j++) {
      for (k = fei1[j].x; k <= fei1[j].y; k++) {
        _hash[k] = 1;
      }
    }
    int flag = 0;
    for (j = 0; j < q; j++) {
      for (k = fei2[j].x + i; k <= fei2[j].y + i; k++) {
        if (_hash[k]) {
          flag = 1;
          break;
        }
      }
      if (flag) break;
    }
    if (flag) {
      x++;
    }
  }
  printf("%d\n", x);
  return 0;
}
