#include <cstdio>
#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

bool cmp(double a, double b) {
    return a < b;
}
int main() {
    int n, k;
    scanf("%d", &n);
    scanf("%d", &k);
    int a[n];  //价格正整数
    //string str;
    char str[n+1];
    double pay[n]; //实际应付为浮点数
    int cnt = 0;

   
    for (int i = 0; n - i > 0; i++) {//读取N个价格
        scanf("%d", &a[i]);
    }
    getchar(); //放错点,要将价格后的换行读取后再读字符
    for (int i = 0; n - i > 0; i++) {//读取是否支持优惠
        scanf("%c", &str[i]);
    }
    for (int i = 0; n - i > 0; i++) {
        if (str[i] == '0')pay[i] = a[i];
        else pay[i] = a[i] * 0.95;
    }
    sort(pay, pay + n, cmp);
    // for (int i = 0; i < n&&k>0; i++) { //循环错误,K>0代表有钱,但不一定买的起下一件物品
        
    //     k = k - pay[i];
    //     cnt+=1;
    // }

    double remain = k;
    for (int i = 0; n-i>0; i++) {
        if (remain>=pay[i]) {
        remain = remain-pay[i];//如果反过来将浮点数赋值给整数,则会发生截断(丢失小数部分),这时候通常需要显式强制转换,例如 int x = (int)3.14;(结果为 3)。
        cnt+=1;
        }
        else{
            break;
        }
    }
    printf("%d",cnt);
}


// 64 位输出请用 printf("%lld")