#include <bits/stdc++.h>
using namespace std;
long long A, B, C, D, p = 1000000009;
pair<int, int> a[100020];
int n, k, m, x, y;
pair<int, int> ud(pair<int, int> a, pair<int, int> b) {
  return pair<int, int>(a.second + b.second,
                        1 + max(a.first + b.second, a.second + b.first));
}
struct N {
  int l, r, v;
  N *L, *R;
  pair<int, int> w;
  pair<int, int> qy() {
    if (this == 0 || y < l || x > r) return pair<int, int>(-1, 0);
    if (x <= l && r <= y) return w;
    if (v > y || v < x) return max(L->qy(), R->qy());
    return ud(L->qy(), R->qy());
  }
} t[100020], *o, z;
N *bd(int x, int y) {
  if (x > y) return &z;
  int p = max_element(a + x, a + y + 1) - a;
  t[p].l = a[x].second, t[p].r = a[y].second, t[p].v = a[p].second;
  t[p].L = bd(x, p - 1), t[p].R = bd(p + 1, y);
  t[p].w = ud(t[p].L->w, t[p].R->w);
  return t + p;
}
int main() {
  cin >> n >> k;
  z.w = pair<int, int>(-1, 0);
  for (int i = (0); i <= (k - 1); i++) cin >> a[i].first >> a[i].second;
  cin >> A >> B >> C >> D;
  for (int i = (k); i <= (n - 1); i++)
    a[i].first = (a[i - 1].first * A + B) % p,
    a[i].second = (a[i - 1].second * C + D) % p;
  sort(a, a + n);
  for (int i = (0); i <= (n - 1); i++) swap(a[i].first, a[i].second);
  o = bd(0, n - 1);
  cin >> m;
  for (int i = (0); i <= (m - 1); i++)
    scanf("%d%d", &x, &y), printf("%d\n", o->qy().second);
  return 0;
}
