#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

struct Cake{
    int door,sweet,energy;
};

int main(){
    int n,sweet0,energy0,num;  //蛋糕的种类数、初始甜度等级、初始体力值、最大制作数量
    cin>>n>>sweet0>>energy0>>num;

    vector<Cake> cakes(n);
    vector<int> door(n),sweet(n),energy(n);

    for(int i=0;i<n;i++) cin>>door[i];
    for(int i=0;i<n;i++) cin>>sweet[i];
    for(int i=0;i<n;i++) cin>>energy[i];
    for(int i=0;i<n;i++) cakes[i]={door[i],sweet[i],energy[i]};

    sort(cakes.begin(),cakes.end(), [](const Cake& a,const Cake& b){
         return a.door<b.door;
    });

    vector<vector<long long>> dp(num+1, vector<long long>(energy0+1,-1));
    /*
       0  1  2        energy0
    0  -1 -1 -1  ...   -1
    1  -1
    2  -1
        .
        .
        .
   num -1       ...    -1
                           */
    dp[0][0]=(long long)sweet0;
    /*
       0       1  2        energy0
    0  sweet0 -1 -1  ...   -1
    1  -1
    2  -1
        .
        .
        .
   num -1       ...        -1
                           */
    //每块蛋糕
    for(int i=0;i<n;i++){
        //行,逆序遍历
        for(int j = num ; j>=1 ; j--){
            //01背包以energy为V
            for(int energy_now = energy0 ; energy_now >= cakes[i].energy ; energy_now--){                
                /*
                    j-1  做这个蛋糕之前做的蛋糕数量
                    energy_now - cakes[i].energy  做这个蛋糕之前消耗的体力
                    dp[j-1][energy_now - cakes[i].energy]	做这个蛋糕之前的甜度
                */
                if(dp[j-1][energy_now - cakes[i].energy] >= cakes[i].door){  //做蛋糕之前的甜度,够不够门槛?
                /*
                    dp[j][energy_now]  
                    当前记录的(做j个蛋糕、消耗energy_now体力)的最大甜度
                    dp[j-1][energy_now - cakes[i].energy] + cakes[i].sweet
                    如果做了这个蛋糕,新甜度 = 之前甜度 + 这个蛋糕的提升
                */
                    dp[j][energy_now] = max(dp[j][energy_now] , dp[j-1][energy_now-cakes[i].energy]+ cakes[i].sweet);
                }
            }
        }
    }
    
    long long max_sweet = sweet0;
    int count = 0;

    for(int j=0;j<=num;j++){
        for(int energy_now=0;energy_now<=energy0;energy_now++){
            if(dp[j][energy_now] > max_sweet){
                max_sweet = dp[j][energy_now];
                count = j;
            }else if(dp[j][energy_now] == max_sweet){
                if(count > j) count = j;
            }
        }
    }
    
    cout <<max_sweet<<" "<<count<<endl;
    return 0;
}