#include #include #define max(a,b) (( (a) > (b) ) ? (a) : (b)) long T,K,L; char keys[95]; char letters[95]; char tmp; long ltmp; long fr[95]; long li[95]; long podz[95][95]; long ref[95][95]; long tab1[95]; long tab2[95]; long tab3[95]; long tab4[95]; long* old; long* neew; long* oldli; long* neewli; int main() { int i; cin >> T; long oldT = T; while (T > 0) { cin >> K >> L; for(i=0; i< K; i++) { cin >> tmp; keys[i] = tmp; } for(i=0; i< L; i++) { cin >> tmp; letters[i] = tmp; } for(i=0; i< L; i++) { cin >> ltmp; fr[i] = ltmp; } for(i=0; i < 95; i++) { tab1[i] = tab2[i] = tab3[i] = tab4[i] = li[i] = 0; for (int j=0; j<95; j++) { podz[i][j]=0; } } old =tab1; neew = tab2; oldli = tab3; neewli = tab4; for (int l = L-1; l>=0; l--) { neew[1] = old[1] + fr[l]; neewli[1] = oldli[1] + fr[l]; podz[l][1] = -1; for(int k=2; k<=K; k++) { long bezdod = max( oldli[k] + fr[l] , old[k] ) ; long zdod = max(fr[l], old[k-1]); if (zdod <= bezdod) { neewli[k] = fr[l]; neew[k] = zdod; podz[l][k] = 10; } else { neewli[k] = oldli[k] + fr[l]; neew[k] = bezdod; podz[l][k] = -1; } } //for(i=1;i<=K;i++) cout<