func_code_string: #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;   }   