#include "bits/stdc++.h" #define wsp cin >> ws; #define sp setprecision #define sn(n) scanf("%lld",&n) #define cn(n) cin>>n #define pr(n) printf("%lld\n",n) #define ff first #define ss second #define prn cout<=b;i--) #define ren(i,n) for(ll i=n-1;i>=0;i--) #define LALIT ios_base::sync_with_stdio(false);cin.tie(0) #define tr(container, it) for(__typeof(container.begin()) it = container.begin(); it != container.end(); it++) #define mem(n,m) memset(n,m,sizeof(n)) #define mp make_pair #define mod 1000000007 using namespace std; typedef unsigned long long int ull; typedef int ll; typedef pair pii; typedef pair pli; typedef pair pdi; typedef pair pll; typedef pair pdd; const int N = int(50000)+5; ll t , n , m , k , cnt , x , y , ex ; ll dp[N] ; char a[N] ; ll s[N] ; ll ans[N] ; int BIT[N] , BIT2[N] ; void upd(int x, int delta) { for(; x <= m; x += x&-x) BIT[x] += delta; } int get(int x) { int sum = 0; for(; x > 0; x -= x&-x) sum += BIT[x]; return sum; } void upd2(int x, int delta) { for(; x <= m; x += x&-x) BIT2[x] += delta; } int get2(int x) { int sum = 0; for(; x > 0; x -= x&-x) sum += BIT2[x]; return sum; } void solve() { mem(BIT,0) ; mem(BIT2,0) ; vector v , u ; cin >> m >> n ; forp(i,1,n) { cin >> a[i] ; } forp(i,1,n) { cin >> s[i] ; } forp(i,1,n) { cin >> x ; if(s[i]>x)continue ; if(a[i]=='C' or a[i]=='E') { v.pb({x,-s[i]}) ; } else { u.pb({x,-s[i]}) ; } } v.pb({1e10,0}) ; u.pb({1e10,0}) ; sort(v.begin(),v.end()) ; sort(u.begin(),u.end()) ; x = y = 0 ; forp(i,1,m) { dp[i] = dp[i-1] ; cnt = 1 ; while(v[x].ff==i) { k = -v[x].ss ; upd(k,1) ; ex = x+1-get(k-1) ; dp[i] = max(dp[i],dp[-v[x].ss]+ex) ; x++; } cnt = 1 ; while(u[y].ff==i) { k = -u[y].ss ; upd2(k,1) ; ex = y+1-get2(k-1) ; dp[i] = max(dp[i],dp[-u[y].ss]+ex) ; y++; } } cnt = 1 ; forp(i,1,n) { if(dp[m]> t ; while(t--) { solve() ; } return 0 ; }