#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, q;
int a, b;
vector<int> c, v;
const long long inf = 1LL << 62;
void init() {
  scanf("%d %d", &n, &q);
  c.resize(n);
  v.resize(n);
  for (int i = 0; i < n; i++) scanf("%d", &v[i]);
  for (int i = 0; i < n; i++) scanf("%d", &c[i]);
}
long long memo[MAXN];
long long solve() {
  long long ans = -inf;
  vector<long long> best2(2, -1);
  for (int i = 0; i < MAXN; i++) memo[i] = -inf;
  for (int i = 0; i < n; i++) {
    long long v1 = v[i] * (long long)b;
    long long v2 = memo[c[i]] + v[i] * (long long)a;
    long long Obest = -inf;
    for (int k = 0; k < 2; k++)
      if (best2[k] != -1 && best2[k] != c[i])
        Obest = max(Obest, memo[best2[k]]);
    v1 = max(v1, v1 + Obest);
    memo[c[i]] = max(memo[c[i]], max(v1, v2));
    ans = max(ans, memo[c[i]]);
    bool ok = 1;
    for (int k = 0; k < 2; k++)
      if (best2[k] == c[i]) ok = 0;
    if (best2[1] == -1)
      swap(best2[1], best2[0]);
    else if (best2[0] != -1 && memo[best2[0]] > memo[best2[1]])
      swap(best2[1], best2[0]);
    if (ok)
      for (int k = 0; k < 2; k++)
        if (best2[k] == -1 || memo[c[i]] > memo[best2[k]]) {
          best2[k] = c[i];
          break;
        }
  }
  return ans;
}
int main() {
  init();
  while (q--) {
    scanf("%d %d", &a, &b);
    cout << max(0LL, solve()) << "\n";
  }
}
