#include <bits/stdc++.h>
using namespace std;
const long long inf = (long long)1e18;
int n, q;
int v[111111], c[111111];
long long first[111111];
long long calc(long long a, long long b) {
  int m1 = 0, m2 = 0;
  for (int i = 1; i <= n; ++i) first[i] = -inf;
  first[0] = 0;
  for (int i = 0; i < n; ++i) {
    int &cc = c[i], &vv = v[i];
    long long cur = b * vv;
    if (first[cc] > -inf) {
      cur = max(cur, first[cc] + a * vv);
    }
    if (m1 != cc) {
      cur = max(cur, first[m1] + b * vv);
    } else if (m2 != cc) {
      cur = max(cur, first[m2] + b * vv);
    }
    if (cur > first[cc]) {
      first[cc] = cur;
      if (first[cc] > first[m1]) {
        m2 = m1, m1 = cc;
      } else if (first[cc] > first[m2] && cc != m1) {
        m2 = cc;
      }
    }
  }
  return first[m1];
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n; ++i) scanf("%d", &v[i]);
  for (int i = 0; i < n; ++i) scanf("%d", &c[i]);
  while (q--) {
    int a, b;
    scanf("%d%d", &a, &b);
    cout << calc((long long)a, (long long)b) << endl;
  }
  return 0;
}
