#include <bits/stdc++.h>
using namespace std;
template <class T>
using vec = vector<T>;
template <typename Iter>
ostream &_IterOutput_(ostream &o, Iter b, Iter e, const string ss = "",
                      const string se = "") {
  o << ss;
  for (auto it = b; it != e; it++) o << (it == b ? "" : ", ") << *it;
  return o << se;
}
template <typename T1, typename T2>
ostream &operator<<(ostream &o, const pair<T1, T2> &pair) {
  return o << "(" << pair.first << ", " << pair.second << ")";
}
template <typename T>
ostream &operator<<(ostream &o, const vector<T> &vec) {
  return _IterOutput_(o, begin(vec), end(vec), "[", "]");
}
template <typename T>
ostream &operator<<(ostream &o, const set<T> &st) {
  return _IterOutput_(o, begin(st), end(st), "{", "}");
}
template <typename T, size_t N>
ostream &operator<<(ostream &o, const array<T, N> &arr) {
  return _IterOutput_(o, begin(arr), end(arr), "|", "|");
}
template <typename T1, typename T2>
ostream &operator<<(ostream &o, const map<T1, T2> &mp) {
  o << "{";
  for (auto it = mp.begin(); it != mp.end(); it++) {
    o << (it == mp.begin() ? "" : ", ") << it->first << ":" << it->second;
  }
  o << "}";
  return o;
}
void lucky_test() {
  long long a = rand(), b = rand();
  if ((a * 32768 + b) % 100000 == 0) {
    cout << "not lucky" << endl;
    exit(0);
  }
}
const long long MX = 5432;
const long long INF = 1e18;
long long N, second, E;
long long X[MX];
long long A[MX], B[MX], C[MX], D[MX];
long long off[MX];
bool us[MX][MX / 2];
long long mem[MX][MX / 2];
long long dp(long long n, long long in) {
  if (n == 0) {
    if (in == 0)
      return 0;
    else
      return INF;
  }
  if (in > MX / 2) return INF;
  long long out = in + off[n];
  if (n != N) {
    if (out < 0) return INF;
    if (in < 0) return INF;
    if (!out and !in) return INF;
  }
  long long &ans = mem[n][in + 3];
  if (us[n][in + 3]) return ans;
  us[n][in + 3] = true;
  ans = INF;
  if (n == second) {
    ans = min(ans, dp(n - 1, in) + D[n] - X[n]);
    ans = min(ans, dp(n - 1, in + 1) + C[n] + X[n]);
    return ans;
  }
  if (n == E) {
    ans = min(ans, dp(n - 1, in) + A[n] + X[n]);
    ans = min(ans, dp(n - 1, in - 1) + B[n] - X[n]);
    return ans;
  }
  if (out) ans = min(ans, dp(n - 1, in) + A[n] + D[n]);
  if (in) ans = min(ans, dp(n - 1, in) + B[n] + C[n]);
  ans = min(ans, dp(n - 1, in + 1) + A[n] + C[n] + 2 * X[n]);
  ans = min(ans, dp(n - 1, in - 1) + B[n] + D[n] - 2 * X[n]);
  return ans;
}
int32_t main() {
  do {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
  } while (0);
  lucky_test();
  cin >> N >> second >> E;
  for (long long(i) = 0; (i) < (N); (i)++) cin >> X[i + 1];
  for (long long(i) = 0; (i) < (N); (i)++) cin >> A[i + 1];
  for (long long(i) = 0; (i) < (N); (i)++) cin >> B[i + 1];
  for (long long(i) = 0; (i) < (N); (i)++) cin >> C[i + 1];
  for (long long(i) = 0; (i) < (N); (i)++) cin >> D[i + 1];
  off[second] = 1;
  off[E] = -1;
  for (long long(i) = (1); (i) != (N + 1); (i) += ((N + 1) > (1) ? 1 : -1))
    off[i] += off[i - 1];
  cout << dp(N, 0) << endl;
  return 0;
}
