#include <bits/stdc++.h>
using namespace std;
long long n, s, e;
long long x[5000 + 1] = {0}, a[5000 + 1] = {0}, b[5000 + 1] = {0},
                   c[5000 + 1] = {0}, d[5000 + 1] = {0};
long long min_table[5000 + 1][5000 + 1] = {{0}};
bool check_table[5000 + 1][5000 + 1] = {{false}};
long long find_min_dp(long long i_num = n, long long num_inp = 0,
                      long long num_out = 0) {
  if (i_num == 0) {
    if (num_inp == 0 && num_out == 0) return 0;
    return 999999999999999;
  }
  if ((i_num < num_inp) || (i_num < num_out) || (num_inp > n - i_num) ||
      (num_out > n - i_num))
    return 999999999999999;
  if ((i_num < n) && (num_inp < 1) && (num_out < 1)) return 999999999999999;
  if ((i_num < s) && (num_inp < 1)) return 999999999999999;
  if ((i_num < e) && (num_out < 1)) return 999999999999999;
  if (check_table[i_num][num_inp]) return min_table[i_num][num_inp];
  long long temp = 0;
  if (i_num == s) {
    min_table[i_num][num_inp] = 999999999999999;
    temp = find_min_dp(i_num - 1, num_inp, num_out - 1);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      min_table[i_num][num_inp] =
          min(min_table[i_num][num_inp], temp - x[i_num] + d[i_num]);
    }
    temp = find_min_dp(i_num - 1, num_inp + 1, num_out);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      min_table[i_num][num_inp] =
          min(min_table[i_num][num_inp], temp + x[i_num] + c[i_num]);
    }
  } else if (i_num == e) {
    min_table[i_num][num_inp] = 999999999999999;
    temp = find_min_dp(i_num - 1, num_inp - 1, num_out);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      min_table[i_num][num_inp] =
          min(min_table[i_num][num_inp], temp - x[i_num] + b[i_num]);
    }
    temp = find_min_dp(i_num - 1, num_inp, num_out + 1);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      min_table[i_num][num_inp] =
          min(min_table[i_num][num_inp], temp + x[i_num] + a[i_num]);
    }
  } else {
    min_table[i_num][num_inp] = 999999999999999;
    temp = find_min_dp(i_num - 1, num_inp - 1, num_out - 1);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      min_table[i_num][num_inp] = min(
          min_table[i_num][num_inp], temp - 2 * x[i_num] + b[i_num] + d[i_num]);
    }
    temp = find_min_dp(i_num - 1, num_inp, num_out);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      if (num_out >= 1)
        min_table[i_num][num_inp] =
            min(min_table[i_num][num_inp], temp + a[i_num] + d[i_num]);
      if (num_inp >= 1)
        min_table[i_num][num_inp] =
            min(min_table[i_num][num_inp], temp + b[i_num] + c[i_num]);
    }
    temp = find_min_dp(i_num - 1, num_inp + 1, num_out + 1);
    if (temp != 999999999999999) {
      check_table[i_num][num_inp] = true;
      min_table[i_num][num_inp] = min(
          min_table[i_num][num_inp], temp + 2 * x[i_num] + a[i_num] + c[i_num]);
    }
  }
  return min_table[i_num][num_inp];
}
int main() {
  cin >> n >> s >> e;
  for (long long i = 1; i <= n; i++) {
    cin >> x[i];
  }
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (long long i = 1; i <= n; i++) {
    cin >> b[i];
  }
  for (long long i = 1; i <= n; i++) {
    cin >> c[i];
  }
  for (long long i = 1; i <= n; i++) {
    cin >> d[i];
  }
  cout << find_min_dp() << endl;
  return 0;
}
