#include <bits/stdc++.h>
using namespace std;
const int MAXN = 101010;
long long fst, scnd;
int fst_c, scnd_c;
long long cmax[MAXN];
int c[MAXN];
long long v[MAXN];
bool av[MAXN];
void update(int c, long long val) {
  if (c == fst_c)
    fst = max(fst, val);
  else if (c == scnd_c)
    scnd = max(scnd, val);
  else if (val > scnd) {
    scnd = val;
    scnd_c = c;
  }
  if (fst < scnd) {
    swap(fst, scnd);
    swap(fst_c, scnd_c);
  }
}
long long getmax(int c) {
  if (c == fst_c)
    return scnd;
  else
    return fst;
}
int main() {
  ios_base::sync_with_stdio(0);
  int N, Q;
  cin >> N >> Q;
  int maxcolor = 0;
  for (int i = 0; i < N; i++) cin >> v[i];
  for (int i = 0; i < N; i++) {
    cin >> c[i];
    c[i]--;
    maxcolor = max(maxcolor, c[i] + 1);
  }
  vector<long long> vl;
  for (int q = 0; q < Q; q++) {
    long long a, b;
    cin >> a >> b;
    fst = scnd = 0;
    fst_c = scnd_c = -1;
    long long nowmax = 0;
    for (int i = 0; i < N; i++) {
      cmax[i] = -123456789012345678;
      av[i] = false;
    }
    for (int i = 0; i < N; i++) {
      int cc = c[i];
      long long tmp = getmax(cc) + v[i] * b;
      if (av[cc]) tmp = max(tmp, cmax[cc] + v[i] * a);
      cmax[cc] = max(cmax[cc], tmp);
      av[cc] = true;
      update(cc, cmax[cc]);
    }
    vl.push_back(max(0LL, getmax(-2)));
  }
  for (int i = 0; i < vl.size(); i++) cout << vl[i] << endl;
  return 0;
}
