#include <bits/stdc++.h>
using namespace std;
const int N = 300011;
const int oo = 2e9;
const int LOGN = 18;
int n, a, b, c, d, len, t[N], q[N];
long long seg[4 * N], lazy[4 * N], start;
vector<int> all;
void push(int n, int s, int e) {
  if (lazy[n]) {
    seg[n] += lazy[n];
    if (s != e) {
      lazy[2 * n] += lazy[n];
      lazy[2 * n + 1] += lazy[n];
    }
    lazy[n] = 0;
  }
}
void update(int n, int s, int e, int l, int r, long long val) {
  push(n, s, e);
  if (s > r || e < l) return;
  if (s >= l && e <= r) {
    lazy[n] += val;
    push(n, s, e);
    return;
  }
  update(2 * n, s, (s + e) / 2, l, r, val);
  update(2 * n + 1, (s + e) / 2 + 1, e, l, r, val);
  seg[n] = min(seg[2 * n], seg[2 * n + 1]);
}
long long get(int n, int s, int e, int l, int r) {
  push(n, s, e);
  if (s > r || e < l) return oo;
  if (s >= l && e <= r) {
    return seg[n];
  }
  return min(get(2 * n, s, (s + e) / 2, l, r),
             get(2 * n + 1, (s + e) / 2 + 1, e, l, r));
}
int main() {
  scanf("%d", &n);
  scanf("%d%d", &a, &b);
  scanf("%d%d", &c, &d);
  scanf("%lld%d", &start, &len);
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &t[i], &q[i]);
    all.push_back(t[i]);
    all.push_back(t[i] + 1);
  }
  all.push_back(0);
  sort(all.begin(), all.end());
  all.resize(unique(all.begin(), all.end()) - all.begin());
  int id = 0, lft = 0;
  for (int i = 0; i < all.size(); ++i) {
    while (id < n && t[id] - all[i] < len) {
      if (q[id]) {
        start += c;
      } else {
        start -= d;
      }
      update(1, 1, n, id + 1, id + 1, start);
      id++;
    }
    while (lft < n && t[lft] < all[i]) {
      long long change = 0;
      if (q[lft])
        change = a - c;
      else
        change = -b + d;
      start += change;
      update(1, 1, n, lft + 1, id, change);
      lft++;
    }
    if (id == 0 || get(1, 1, n, 1, id) >= 0) {
      printf("%d\n", all[i]);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
