There are n squares drawn from left to right on the floor. The i-th square has three integers p_i,a_i,b_i, written on it. The sequence p_1,p_2,...,p_n forms a permutation.

Each round you will start from the leftmost square 1 and jump to the right. If you are now on the i-th square, you can do one of the following two operations:

  1. Jump to the i+1-th square and pay the cost a_i. If i=n, then you can end the round and pay the cost a_i. 
  2. Jump to the j-th square and pay the cost b_i, where j is the leftmost square that satisfies j > i, p_j > p_i. If there is no such j then you can end the round and pay the cost b_i. 



There are q rounds in the game. To make the game more difficult, you need to maintain a square set S (initially it is empty). You must pass through these squares during the round (other squares can also be passed through). The square set S for the i-th round is obtained by adding or removing a square from the square set for the (i-1)-th round. 

For each round find the minimum cost you should pay to end it.

Input

The first line contains two integers n, q (1≤ n,q≤ 2 ⋅ 10^5) — the number of squares and the number of rounds.

The second line contains n distinct integers p_1,p_2,...,p_n (1≤ p_i≤ n). It is guaranteed that the sequence p_1,p_2,...,p_n forms a permutation.

The third line contains n integers a_1,a_2,…,a_n (-10^9≤ a_i≤ 10^9).

The fourth line contains n integers b_1,b_2,...,b_n (-10^9≤ b_i≤ 10^9).

Then q lines follow, i-th of them contains a single integer x_i (1≤ x_i≤ n). If x_i was in the set S on the (i-1)-th round you should remove it, otherwise, you should add it.

Output

Print q lines, each of them should contain a single integer — the minimum cost you should pay to end the corresponding round.

Examples

Input


3 2
2 1 3
10 -5 4
3 -2 3
1
2


Output


6
8


Input


5 4
2 1 5 3 4
6 -5 3 -10 -1
0 3 2 7 2
1
2
3
2


Output


-8
-7
-7
-8

Note

Let's consider the character T as the end of a round. Then we can draw two graphs for the first and the second test.

<image> <image>

In the first round of the first test, the set that you must pass through is \{1\}. The path you can use is 1→ 3→ T and its cost is 6.

In the second round of the first test, the set that you must pass through is \{1,2\}. The path you can use is 1→ 2→ 3→ T and its cost is 8.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
struct pt
{
	int l,r,id,fl;
	pt(int l=0,int r=0,int id=0,int fl=0):l(l),r(r),id(id),fl(fl){}
	bool operator<(const pt x) const
	{
		return r<x.r;
	}
}q[1000005];
int n,m,p[200005],a[200005],b[200005],qt,st[200005],tp;
ll qans[200005],sum[200005],f[200005];
set<int> s;
inline int lowbit(int x)
{
	return x&-x;
}
void modify(int x,ll v)
{
//	printf("modify:x=%d,v=%lld\n",x,v);
	for(int i=x;i<=n;i+=lowbit(i))
		sum[i]+=v;
}
ll query(int x)
{
	ll ans=0;
	for(int i=x;i;i-=lowbit(i))
		ans+=sum[i];
	return ans;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&p[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
		scanf("%d",&b[i]);
	n++;
	p[n]=n;
	q[++qt]=pt(1,n,0,1);
	s.insert(1);
	s.insert(n);
	for(int i=1;i<=m;i++)
	{
		int x;
		scanf("%d",&x);
		if(x==1) continue;
		set<int>::iterator it;
		if(s.find(x)!=s.end())
		{
			s.erase(x);
			it=s.upper_bound(x);
			int v=*it;
			q[++qt]=pt(x,v,i,-1);
			it--;
			q[++qt]=pt(*it,x,i,-1);
			q[++qt]=pt(*it,v,i,1);
		}
		else
		{
			it=s.upper_bound(x);
			int v=*it;
			q[++qt]=pt(x,v,i,1);
			it--;
			q[++qt]=pt(*it,x,i,1);
			q[++qt]=pt(*it,v,i,-1);
			s.insert(x);
		}
	}
	sort(q+1,q+qt+1);
	int qnw=1;
	while(qnw<=qt&&q[qnw].r==1) qnw++;
//	for(int i=1;i<=qt;i++)
//		printf("i=%d,l=%d,r=%d,id=%d,fl=%d\n",i,q[i].l,q[i].r,q[i].id,q[i].fl);
	st[1]=1,tp=1;
	for(int i=2;i<=n;i++)
	{
		ll las=a[i-1],sum=0;
	//	printf("i=%d\n",i);
		while(tp&&p[st[tp]]<p[i])
		{
			ll nw=min(las,(ll)b[st[tp]]);
		//	printf("st=%d,las=%lld,nw=%lld,sum=%lld,f=%lld\n",st[tp],las,nw,sum,f[tp]);
			modify(st[tp-1]+1,nw-sum);
			modify(st[tp]+1,-nw+sum);
			las=nw+f[tp];
			sum+=f[tp];
			tp--;
		}
		modify(1,las-sum);
		modify(st[tp]+1,-las+sum);
		st[++tp]=i;
		f[tp]=las;
		while(qnw<=qt&&q[qnw].r==i)
		{
			qans[q[qnw].id]+=query(q[qnw].l)*q[qnw].fl;
			qnw++;
		}
	}
	for(int i=1;i<=m;i++)
		qans[i]+=qans[i-1];
	for(int i=1;i<=m;i++)
		printf("%lld\n",qans[i]);
	return 0;
}
