#include <bits/stdc++.h>
using namespace std;
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
int read() {
  int x = 0, w = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') w = -1;
    ch = getchar();
  }
  while (ch <= '9' && ch >= '0') x = x * 10 + ch - '0', ch = getchar();
  return x * w;
}
const int inf = 0x3f3f3f3f, N = 2e5 + 10;
const long long Mod = 998244353;
struct node {
  long long x, a, b, c, d;
} num[5010];
long long nxt[N];
int n, S, E;
long long get_f(node t1, node t2) {
  if (t2.x < t1.x)
    return abs(t2.x - t1.x) + t1.c + t2.b;
  else
    return abs(t2.x - t1.x) + t1.d + t2.a;
}
int main() {
  n = read();
  S = read();
  E = read();
  for (int i = 1; i <= n; i++) num[i].x = read();
  for (int i = 1; i <= n; i++) num[i].a = read();
  for (int i = 1; i <= n; i++) num[i].b = read();
  for (int i = 1; i <= n; i++) num[i].c = read();
  for (int i = 1; i <= n; i++) num[i].d = read();
  nxt[S] = E;
  long long ans = get_f(num[S], num[E]);
  for (int i = 1; i <= n; i++) {
    if (i == S || i == E) continue;
    long long sum = 1e18;
    int sav = 0;
    for (int j = S; j != E; j = nxt[j]) {
      long long tmp = get_f(num[j], num[i]) + get_f(num[i], num[nxt[j]]) -
                      get_f(num[j], num[nxt[j]]);
      if (tmp < sum) sum = tmp, sav = j;
    }
    ans += sum;
    nxt[i] = nxt[sav];
    nxt[sav] = i;
  }
  printf("%lld\n", ans);
  return 0;
}
