#include <bits/stdc++.h>
const long long INF = 1000 * 1000 * 1000 + 47;
const long long LINF = INF * (long long)INF;
using namespace std;
const int mod = 1000 * 1000 * 1000 + 9;
const int MAX = 100005;
pair<int, int> pts[MAX];
int n, k;
struct node {
  int x, y, l, r;
  int dp0, dp1;
  node() { l = r = -1; }
  node(pair<int, int> pt) {
    l = r = -1;
    x = pt.first, y = pt.second;
    dp1 = 1;
    dp0 = 0;
  }
};
node treap[MAX];
int getDp0(int u) {
  if (u == -1) return 0;
  return treap[u].dp0;
}
int getDp1(int u) {
  if (u == -1) return 0;
  return treap[u].dp1;
}
void upd(int root) {
  if (root == -1) return;
  treap[root].dp1 = 1 + getDp0(treap[root].l) + getDp0(treap[root].r);
  treap[root].dp0 = max(treap[root].dp1 - 1,
                        max(getDp0(treap[root].l) + getDp1(treap[root].r),
                            getDp1(treap[root].l) + getDp0(treap[root].r)));
}
int merge(int l, int r) {
  if (l == -1) return r;
  if (r == -1) return l;
  int root;
  if (treap[l].y > treap[r].y) {
    root = l;
    treap[l].r = merge(treap[l].r, r);
  } else {
    root = r;
    treap[r].l = merge(l, treap[r].l);
  }
  upd(root);
  return root;
}
pair<int, int> split(int root, int x) {
  if (root == -1) return {-1, -1};
  pair<int, int> res;
  if (treap[root].x <= x) {
    res = split(treap[root].r, x);
    treap[root].r = res.first;
    res = {root, res.second};
  } else {
    res = split(treap[root].l, x);
    treap[root].l = res.second;
    res = {res.first, root};
  }
  upd(res.first);
  upd(res.second);
  return res;
}
int main() {
  ios_base::sync_with_stdio(0);
  int root = -1;
  cin >> n >> k;
  for (int i = 0; i < k; i++) {
    cin >> pts[i].first >> pts[i].second;
  }
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  for (int i = k; i < n; i++) {
    pts[i].first = ((a * (long long)pts[i - 1].first) + b) % mod;
    pts[i].second = ((c * (long long)pts[i - 1].second) + d) % mod;
  }
  sort(pts, pts + n);
  for (int i = 0; i < n; i++) {
    treap[i] = node(pts[i]);
    root = merge(root, i);
  }
  int q;
  cin >> q;
  while (q--) {
    int l, r;
    cin >> l >> r;
    auto roots = split(root, l - 1);
    auto roots2 = split(roots.second, r);
    cout << ((roots2.first == -1) ? 0 : treap[roots2.first].dp0) << endl;
    root = merge(roots.first, merge(roots2.first, roots2.second));
  }
}
