#include <bits/stdc++.h>
using namespace std;
int n, s, t, num;
long long f[5010][5010], x[5010], a[5010], b[5010], c[5010], d[5010], X;
inline void read(long long a[]) {
  for (register int i = 1; i <= n; i++) cin >> a[i];
}
inline void update(register long long& x, const long long& y) {
  if (x > y) x = y;
}
int main() {
  cin >> n >> s >> t;
  read(x), read(a), read(b), read(c), read(d);
  memset(f, 63, sizeof(f));
  f[0][0] = 0;
  for (int i = 1; i <= n; i++) {
    for (register int j = 0; j <= n; j++)
      if ((X = f[i - 1][j]) != 0x3f3f3f3f3f3f3f3fll) {
        int l = j + num, r = j;
        if (l < 0 || r < 0) continue;
        if (!l && !r && i != 1) continue;
        if (i == s) {
          update(f[i][j + 1], X + (-x[i] + d[i]));
          if (l) update(f[i][j], X + (x[i] + c[i]));
        } else if (i == t) {
          update(f[i][j], X + (-x[i] + b[i]));
          if (r) update(f[i][j - 1], X + (x[i] + a[i]));
        } else {
          update(f[i][j + 1], X + (-x[i] + d[i]) + (-x[i] + b[i]));
          if (l) update(f[i][j], X + (x[i] + c[i]) + (-x[i] + b[i]));
          if (r) update(f[i][j], X + (x[i] + a[i]) + (-x[i] + d[i]));
          if (l && r) update(f[i][j - 1], X + (x[i] + a[i]) + (x[i] + c[i]));
        }
      }
    if (i == s) num--;
    if (i == t) num++;
  }
  cout << f[n][0] << endl;
  return 0;
}
