#include <bits/stdc++.h>
using namespace std;
int x[5010], a[5010], b[5010], c[5010], d[5010];
int nex[5010];
long long dis(int i, int j) {
  if (i > j)
    return (long long)abs(x[i] - x[j]) + c[i] + b[j];
  else
    return (long long)abs(x[i] - x[j]) + d[i] + a[j];
}
int main() {
  int n, s, t;
  while (~scanf("%d%d%d", &n, &s, &t)) {
    memset(nex, -1, sizeof(nex));
    for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &c[i]);
    for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
    nex[s] = t;
    for (int i = 1; i <= n; i++) {
      if (i == s || i == t) continue;
      long long maxx = (long long)1e18;
      int k;
      for (int j = s; nex[j] + 1; j = nex[j]) {
        long long tmp = dis(j, i) + dis(i, nex[j]) - dis(j, nex[j]);
        if (tmp < maxx) {
          maxx = tmp;
          k = j;
        }
      }
      nex[i] = nex[k];
      nex[k] = i;
    }
    long long ans = 0;
    for (int i = s; nex[i] + 1; i = nex[i]) ans += dis(i, nex[i]);
    printf("%I64d\n", ans);
  }
  return 0;
}
