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

int main() {
    int n;
    long long x;
    cin >> n >> x;
    vector<int> arr1(n);
    for (int i = 0; i < n; i++) {
        cin >> arr1[i]; 
    }
    vector<int> arr2(n);
    for (int i = 0; i < n; i++) {
        cin >> arr2[i]; 
    }

    // 比较每种货物供应商的价格,让更便宜的胜出。
    vector<int> arr3(n);
    for (int i = 0; i < n; i++) {
        if (arr1[i] >= arr2[i]) {
            arr3[i] = arr2[i];
        }else {
            arr3[i] = arr1[i];
        }
    }

    long long y = 0;
    for (int i = 0; i < n; i++) {
        y += arr3[i];         
    }
    cout << min(x, y) << endl;
}
// 64 位输出请用 printf("%lld")
  1. 分类讨论:1)不拆,直接网购最省钱,那么输出x。2)拆,对于每种货物,都采购AB中最便宜的。
  2. 统计最低价格:先把A和B中每个货物的最低价格都放到一个数组里,然后对这个数组求和。
  3. 比较确定最终输出:用min()来比较。
  4. 两种求和方式:第一种是上面的遍历求和。第二种是用accumulate()函数求和——int y = accumulate(arr.begin(), arr.end());