#include <bits/stdc++.h>
using namespace std;
template <class X, class Y>
void minimize(X &x, const Y &y) {
  if (x > y) x = y;
}
template <class X, class Y>
void maximize(X &x, const Y &y) {
  if (x < y) x = y;
}
template <class T>
T Abs(const T &x) {
  return (x < 0 ? -x : x);
}
int x[5555], a[5555], b[5555], c[5555], d[5555], n, s, e;
long long fromBig[5555], fromSmall[5555], toBig[5555], toSmall[5555];
void init(void) {
  scanf("%d%d%d", &n, &s, &e);
  for (int i = (1), _b = (n); i <= _b; i = i + 1) scanf("%d", &x[i]);
  for (int i = (1), _b = (n); i <= _b; i = i + 1) scanf("%d", &a[i]);
  for (int i = (1), _b = (n); i <= _b; i = i + 1) scanf("%d", &b[i]);
  for (int i = (1), _b = (n); i <= _b; i = i + 1) scanf("%d", &c[i]);
  for (int i = (1), _b = (n); i <= _b; i = i + 1) scanf("%d", &d[i]);
}
long long moveCost(int from, int to) {
  long long fromCost = from > to ? fromBig[from] : fromSmall[from];
  long long toCost = to > from ? toBig[to] : toSmall[to];
  return (fromCost + toCost);
}
void process(void) {
  for (int i = (1), _b = (n); i <= _b; i = i + 1) {
    fromBig[i] = x[i] + c[i];
    fromSmall[i] = -x[i] + d[i];
    toBig[i] = x[i] + a[i];
    toSmall[i] = -x[i] + b[i];
  }
  vector<int> cur;
  cur.push_back(s);
  cur.push_back(e);
  long long totCost = moveCost(s, e);
  int nextVal = n + 1;
  while (true) {
    nextVal--;
    while (nextVal > 0 && (nextVal == s || nextVal == e)) nextVal--;
    if (nextVal <= 0) break;
    int bestPos = -1;
    long long bestCost = -1;
    for (int i = 0, _n = ((int)cur.size() - 1); i < _n; i = i + 1) {
      long long moreCost = moveCost(cur[i], nextVal) +
                           moveCost(nextVal, cur[i + 1]) -
                           moveCost(cur[i], cur[i + 1]);
      if (bestPos < 0 || moreCost < bestCost) {
        bestCost = moreCost;
        bestPos = i;
      }
    }
    cur.insert(cur.begin() + bestPos + 1, nextVal);
    totCost += bestCost;
  }
  cout << totCost << endl;
}
int main(void) {
  init();
  process();
  return 0;
}
