#include <iostream>
#include <string>
#include <vector>

int main() {

	std::ios::sync_with_stdio(false);
	std::cin.tie(0);

	std::string ulaz1;
	std::getline(std::cin, ulaz1);

	std::string ulaz2;
	std::getline(std::cin, ulaz2);

    std::string ulaz3;
	std::getline(std::cin, ulaz3);

    std::string ulaz4;
	std::getline(std::cin, ulaz4);

	int N = std::stoi(ulaz1.substr(0, ulaz1.find(" ")));
	int T = std::stoi(ulaz1.substr(ulaz1.find(" ")+1));

	std::vector<int> ocene;

	for(int i = 0; i < N; ++i) {
		ocene.push_back(std::stoi(ulaz2.substr(0, ulaz2.find(" "))));
		ulaz2 = ulaz2.substr(ulaz2.find(" ")+1);
	}

    std::vector<int> putevi;

	for(int i = 0; i < N; ++i) {
		putevi.push_back(std::stoi(ulaz3.substr(0, ulaz3.find(" "))));
		ulaz3 = ulaz3.substr(ulaz3.find(" ")+1);
	}

    std::vector<int> vreme;

	for(int i = 0; i < N; ++i) {
		vreme.push_back(std::stoi(ulaz4.substr(0, ulaz4.find(" "))));
		ulaz4 = ulaz4.substr(ulaz4.find(" ")+1);
	}

    int najveca_ocena = 0;

    for(int i = 0; i < putevi.size(); i++) {
        int tT = T;
        int ukupna_ocena = 0;
        int trenutno = i;

        bool prva = true;

        while(tT > 0) {
            
            int sledeca = 0;
            for(int j = 0; j < putevi.size(); ++j) {
                if((trenutno+1) == putevi[j]) {
                    sledeca = j;
                }
            }

            if(prva) {
                int index2 = 0;
                for(int j = 0; j < putevi.size(); ++j) {
                    if(trenutno+1 == putevi[j]) {
                        index2 = j;
                        break;
                    }
                }

                ukupna_ocena += ocene[index2];
                prva = false;
            }

            int index = 0;
            for(int j = 0; j < putevi.size(); ++j) {
                if(sledeca+1 == putevi[j]) {
                    index = j;
                    break;
                }
            }

            int pot_v = vreme[index];
            if(pot_v <= tT) {
                ukupna_ocena += ocene[index];
                
                tT -= pot_v;
                trenutno = sledeca;
            }else{
                break;
            }
        }

        if(ukupna_ocena > najveca_ocena) {
            najveca_ocena = ukupna_ocena;
        }
    }

    std::cout << najveca_ocena;

}