#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar();
  for (; !isalnum(ch); ch = getchar())
    ;
  for (; isalnum(ch); ch = getchar()) x = x * 10 + ch - '0';
  return x;
}
const long long xx = 5e3 + 101;
long long nxt[xx];
long long x[xx], a[xx], b[xx], c[xx], d[xx];
inline long long dis(long long xa, long long ya) {
  if (ya < xa) return x[xa] - x[ya] + c[xa] + b[ya];
  return x[ya] - x[xa] + d[xa] + a[ya];
}
signed main() {
  long long n = read(), s = read(), t = read();
  for (register long long i = 1; i <= n; ++i) x[i] = read();
  for (register long long i = 1; i <= n; ++i) a[i] = read();
  for (register long long i = 1; i <= n; ++i) b[i] = read();
  for (register long long i = 1; i <= n; ++i) c[i] = read();
  for (register long long i = 1; i <= n; ++i) d[i] = read();
  nxt[s] = t;
  nxt[t] = 0;
  long long ans = dis(s, t);
  for (register long long i = 1; i <= n; ++i)
    if (i != s && i != t) {
      long long mn = 2e18, tmp = s, j = s;
      while (nxt[j]) {
        if (dis(j, i) + dis(i, nxt[j]) - dis(j, nxt[j]) <= mn) {
          mn = dis(j, i) + dis(i, nxt[j]) - dis(j, nxt[j]);
          tmp = j;
        }
        j = nxt[j];
      }
      ans += mn;
      nxt[i] = nxt[tmp];
      nxt[tmp] = i;
    }
  printf("%lld\n", ans);
  return 0;
}
