#include using namespace std; #define rep(i,a,b) for(ll i=a;i=b;i--) #define ll long long #define ull unsigned ll #define ld long double #define bl __int128_t #define fi first #define se second #define vel vector #define vvel vector #define pll pair #define vepll vector #define vvepll vector #define ves vector #define vem vector #define vvem vector #define pmm pair #define cleout(i) cout<using PQ=priority_queue,greater>; // 上 右 下 左 vector di={-1, 0, 1, 0}; vector dj={ 0, 1, 0,-1}; vector dx={ 0, 1, 0,-1}; vector dy={ 1, 0,-1, 0}; vector ddx={ 1, 1, 1, 0, -1, -1, -1, 0 }; vector ddy={ 1, 0, -1, -1, -1, 0, 1, 1 }; ll inf=1000000000000000000;//1e18 // LLONG_MAX mt19937_64 rng((ull)chrono::steady_clock::now().time_since_epoch().count()); //[x^M]1/(1-x)^N=comb(N-1+M,M) ll get(vel &sum,ll l,ll r){ ll ret=0; ret+=sum[r]; if(l>0)ret-=sum[l-1]; return ret; } void _solve(){ ll N,M; cin>>N>>M; vel a(N),b(M),c(N),d(M); rep(i,0,N)cin>>a[i]; rep(i,0,M)cin>>b[i]; rep(i,0,N)cin>>c[i]; rep(i,0,M)cin>>d[i]; ll ans=-1; auto check=[&](){//左端a固定でbの真ん中を全探索すると同じ色のmaxlenが一意に決まる ll N=a.size(); ll M=b.size(); map col; rep(i,0,N)col[c[i]].push_back(i); vel sa=a; vel sb=b; rep(i,1,N)sa[i]+=sa[i-1]; rep(i,1,M)sb[i]+=sb[i-1]; rep(i,0,M){ if(col.count(d[i])){ auto it=upper_bound(col[d[i]].begin(),col[d[i]].end(),min(i,M-i-1)); if(it==col[d[i]].begin()){ continue; } it--; if(i+*it*2>_; else _=1; rep(__,0,_){ _solve(); } }