#include <bits/stdc++.h>
using namespace std;
struct I {
  I() {
    ios::sync_with_stdio(false);
    cin.tie(0);
  }
} init;
const long long MOD = 1e9 + 7;
const long long INF = 1e16;
int main() {
  int n, s, e;
  cin >> n >> s >> e;
  vector<long long> x(n), a(n), b(n), c(n), d(n);
  for (auto &it : x) cin >> it;
  for (auto &it : a) cin >> it;
  for (auto &it : b) cin >> it;
  for (auto &it : c) cin >> it;
  for (auto &it : d) cin >> it;
  vector<vector<long long> > dp(2, vector<long long>(n + 1, INF));
  dp[0][0] = 0;
  auto inR = [&](int m) { return b[m] - x[m]; };
  auto outR = [&](int m) { return d[m] - x[m]; };
  auto inL = [&](int m) { return a[m] + x[m]; };
  auto outL = [&](int m) { return c[m] + x[m]; };
  s--;
  e--;
  if (s > e) {
    swap(s, e);
    swap(b, d);
    swap(a, c);
  }
  for (int i = 0; i < n; i++) {
    vector<vector<long long> > nxt(2, vector<long long>(n + 1, INF));
    if (i == s) {
      for (int j = 0; j <= i; j++) {
        nxt[1][j] = min(nxt[1][j], dp[0][j] + outR(i));
        if (j >= 1) nxt[1][j - 1] = min(nxt[1][j - 1], dp[0][j] + outL(i));
      }
    } else if (i == e) {
      for (int j = 0; j <= i; j++) {
        if (i == n - 1 || j > 0) nxt[0][j] = min(nxt[0][j], dp[1][j] + inL(i));
        nxt[0][j + 1] = min(nxt[0][j + 1], dp[1][j] + inR(i));
      }
    } else {
      for (int k = 0; k <= 1; k++)
        for (int j = 0; j <= i; j++) {
          int in = j;
          int out = j + k;
          nxt[k][j + 1] = min(nxt[k][j + 1], dp[k][j] + inR(i) + outR(i));
          if (in >= 1) nxt[k][j] = min(nxt[k][j], dp[k][j] + inR(i) + outL(i));
          if (out >= 1) nxt[k][j] = min(nxt[k][j], dp[k][j] + inL(i) + outR(i));
          if (i == n - 1 && in == 1 && out == 1)
            nxt[k][j - 1] = min(nxt[k][j - 1], dp[k][j] + inL(i) + outL(i));
          if (in >= 2 || out >= 2)
            nxt[k][j - 1] = min(nxt[k][j - 1], dp[k][j] + inL(i) + outL(i));
        }
    }
    swap(dp, nxt);
  }
  cout << dp[0][0] << endl;
  return 0;
}
