#include <bits/stdc++.h>
using namespace std;
struct Data {
  long long x;
  long long a, b, c, d;
};
long long Calc(Data p, Data q) {
  if (p.x < q.x)
    return abs(p.x - q.x) + p.d + q.a;
  else
    return abs(p.x - q.x) + p.c + q.b;
}
const int MAXN = 5000 + 10;
int N, S, T;
Data A[MAXN], B[MAXN];
int Next[MAXN];
int main() {
  srand(time(0));
  scanf("%d%d%d", &N, &S, &T);
  for (int i = 1; i <= N; ++i) scanf("%lld", &A[i].x);
  for (int i = 1; i <= N; ++i) scanf("%lld", &A[i].a);
  for (int i = 1; i <= N; ++i) scanf("%lld", &A[i].b);
  for (int i = 1; i <= N; ++i) scanf("%lld", &A[i].c);
  for (int i = 1; i <= N; ++i) scanf("%lld", &A[i].d);
  B[1] = A[S];
  B[2] = A[T];
  for (int i = 1, j = 2; i <= N; ++i) {
    if (i == S || i == T) continue;
    B[++j] = A[i];
  }
  memcpy(A, B, sizeof(A));
  reverse(A + 3, A + N + 1);
  S = 1;
  T = 2;
  long long ans = Calc(A[S], A[T]);
  Next[S] = T;
  for (int i = 1; i <= N; ++i) {
    if (i == S || i == T) continue;
    int x = 0;
    long long cost = 1ll << 60;
    for (int p = S; p != T; p = Next[p]) {
      int q = Next[p];
      long long tmp = Calc(A[p], A[i]) + Calc(A[i], A[q]) - Calc(A[p], A[q]);
      if (tmp < cost) {
        cost = tmp;
        x = p;
      }
    }
    ans += cost;
    Next[i] = Next[x];
    Next[x] = i;
  }
  printf("%lld\n", ans);
  return 0;
}
