#include <bits/stdc++.h>
using namespace std;
const int N = 300001;
int n, a, b, c, d, start, len;
vector<int> T;
long long dp[2][N + 2], seg[4 * N];
void build(int p, int s, int e) {
  if (s == e) {
    seg[p] = dp[1][s];
    return;
  }
  build(2 * p, s, (s + e) / 2);
  build(2 * p + 1, (s + e) / 2 + 1, e);
  seg[p] = min(seg[2 * p], seg[2 * p + 1]);
}
long long get(int p, int s, int e, int a, int b) {
  if (s >= a && e <= b) return seg[p];
  if (s > b || e < a) return 1e15;
  return min(get(2 * p, s, (s + e) / 2, a, b),
             get(2 * p + 1, (s + e) / 2 + 1, e, a, b));
}
int main() {
  scanf("%d%d%d%d%d%d%d", &n, &a, &b, &c, &d, &start, &len);
  dp[0][0] = start;
  dp[1][0] = start;
  T.push_back(0);
  for (int i = 1, t, q; i <= n; i++) {
    scanf("%d%d", &t, &q);
    dp[0][i] = dp[0][i - 1], dp[1][i] = dp[1][i - 1];
    if (q)
      dp[0][i] += a, dp[1][i] += c;
    else
      dp[0][i] -= b, dp[1][i] -= d;
    T.push_back(t);
  }
  build(1, 0, n);
  int j = n, c = 0;
  auto it = lower_bound(T.begin(), T.end(), c + len);
  if (it != T.end()) j = *it - 1;
  if (get(1, 0, n, 0, j) >= 0) {
    printf("%d\n", c);
    return 0;
  }
  for (int i = 0; i < T.size(); i++) {
    if (dp[0][i] < 0) break;
    c = T[i] + 1;
    j = lower_bound(T.begin(), T.end(), c + len) - T.begin() - 1;
    if (i == n || j < i + 1 ||
        get(1, 0, n, i + 1, j) - dp[1][i] + dp[0][i] >= 0) {
      printf("%d\n", c);
      return 0;
    }
  }
  puts("-1");
  return 0;
}
