#include <bits/stdc++.h>
using namespace std;
long long INF;
int n;
long long v[100005];
int c[100005];
long long mx[100005];
pair<long long, int> st[2];
int q;
long long a, b;
void solve(long long a, long long b) {
  long long ans = 0;
  st[0].first = 0;
  st[0].second = -2;
  st[1].first = 0;
  st[1].second = -1;
  fill(mx, mx + n, -INF);
  for (int i = 0; i < n; i++) {
    int clr = c[i];
    long long val = v[i];
    long long w1, w2, w;
    int td = 1;
    if (st[td].second == clr) td--;
    w1 = st[td].first + v[i] * b;
    w2 = mx[clr] + v[i] * a;
    w = max(w1, w2);
    if (w > mx[clr]) {
      if (st[1].second == clr) {
        st[1].first = w;
      } else if (st[0].second == clr) {
        st[0].first = w;
      } else {
        if (w >= st[1].first) {
          st[0] = st[1];
          st[1] = make_pair(w, clr);
        } else if (w > st[0].first) {
          st[0] = make_pair(w, clr);
        }
      }
      mx[clr] = w;
      if (st[0] > st[1]) swap(st[0], st[1]);
    }
  }
  for (int i = 0; i < n; i++) {
    ans = max(ans, mx[i]);
  }
  cout << ans << endl;
}
int main() {
  INF = 1.0e18;
  cin >> n >> q;
  for (int i = 0; i < n; i++) cin >> v[i];
  for (int i = 0; i < n; i++) cin >> c[i], c[i]--;
  for (int i = 0; i < q; i++) cin >> a >> b, solve(a, b);
  return 0;
}
