#include <bits/stdc++.h>
using namespace std;
const long long inf = 0x3f3f3f3f3f3f3f3f, mod = 1000000007;
const double pi = 3.1415926535897932, eps = 1e-6;
int n, c[100005], v[100005], q;
long long a, b, f[100005];
pair<long long, int> m1, m2;
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> q;
  for (int(i) = (1); (i) <= (n); (i)++) cin >> v[i];
  for (int(i) = (1); (i) <= (n); (i)++) cin >> c[i];
  while (q--) {
    cin >> a >> b;
    m1 = make_pair(0, 0);
    m2 = make_pair(-1, 0);
    for (int(i) = (1); (i) <= (n); (i)++) f[i] = -inf;
    for (int(i) = (1); (i) <= (n); (i)++) {
      long long cur = f[c[i]] + v[i] * a;
      if (c[i] == m1.second)
        cur = max(m1.first + a * v[i], cur);
      else
        cur = max(m1.first + b * v[i], cur);
      if (c[i] == m2.second)
        cur = max(m2.first + a * v[i], cur);
      else
        cur = max(m2.first + b * v[i], cur);
      if (c[i] == m1.second)
        m1.first = max(m1.first, cur);
      else if (c[i] == m2.second)
        m2.first = max(m2.first, cur);
      else {
        if (cur > m1.first)
          m2 = m1, m1 = make_pair(cur, c[i]);
        else if (cur > m2.first)
          m2 = make_pair(cur, c[i]);
      }
      if (m2.first > m1.first) swap(m1, m2);
      f[c[i]] = max(f[c[i]], cur);
    }
    cout << max(0ll, m1.first) << endl;
  }
  return 0;
}
