#include <bits/stdc++.h>
using namespace std;
long n, m, x, p, q, i, j, k, b[205], pre[205];
bool f[205], vis[205];
struct tzy {
  long p, hp, id;
} a[205];
bool cmp(tzy a, tzy b) { return a.p < b.p; }
bool leftcmp(tzy a, tzy b) { return a.p < b.p || (a.p == b.p && a.hp > b.hp); }
bool rightcmp(tzy a, tzy b) { return a.p < b.p || (a.p == b.p && a.hp < b.hp); }
bool chk(long L, long R, long hp, bool left) {
  long i;
  if (R < L) return 1;
  if (left)
    for (i = L; i <= R; i++) {
      hp += b[i];
      if (hp < 0) return 0;
    }
  else
    for (i = R; i >= L; i--) {
      hp += b[i];
      if (hp < 0) return 0;
    }
  return 1;
}
bool dfs(long l, long r, long pos, bool left) {
  long i, j;
  bool fl = 0;
  if (l > r) return 1;
  if (left) {
    if (vis[l]) return f[l];
    vis[l] = 1;
    if (chk(a[l].p, pos, a[l].hp, left)) {
      pre[l] = -1;
      return f[l] = 1;
    }
    for (i = l + 1; i <= r; i++)
      if (chk(a[l].p, a[i].p - 1, a[l].hp, left) && dfs(i, r, pos, left)) {
        pre[l] = i;
        return f[l] = 1;
      }
    return f[l] = 0;
  } else {
    if (vis[r]) return f[r];
    vis[r] = 1;
    if (chk(pos, a[r].p, a[r].hp, left)) {
      pre[r] = -1;
      return f[r] = 1;
    }
    for (i = r - 1; i >= l; i--)
      if (chk(a[i].p + 1, a[r].p, a[r].hp, left) && dfs(l, i, pos, left)) {
        pre[r] = i;
        return f[r] = 1;
      }
    return f[r] = 0;
  }
}
void pr(long *ans, long len) {
  for (long i = len; i; i--) cout << ans[i] << ' ';
}
void print(long posl, bool left) {
  long i, j, k, cl = 0, ansl[205], cr = 0, ansr[205];
  i = 1;
  while (posl && i != -1) {
    j = pre[i];
    if (j != -1)
      for (k = j - 1; k >= i; k--) ansl[++cl] = a[k].id;
    else
      for (k = posl; k >= i; k--) ansl[++cl] = a[k].id;
    i = j;
  }
  i = m;
  while (posl < m && i != -1) {
    j = pre[i];
    if (j != -1)
      for (k = j + 1; k <= i; k++) ansr[++cr] = a[k].id;
    else
      for (k = posl + 1; k <= i; k++) ansr[++cr] = a[k].id;
    i = j;
  }
  if (left)
    pr(ansl, cl), pr(ansr, cr);
  else
    pr(ansr, cr), pr(ansl, cl);
}
int main() {
  cin >> n >> m;
  for (i = 1; i <= m; i++) {
    a[i].id = i;
    cin >> a[i].p >> a[i].hp;
  }
  sort(a + 1, a + m + 1, cmp);
  for (i = 1; i <= n; i++) cin >> b[i];
  for (i = 1; i <= n; i++) {
    for (j = 1; a[j].p < i && j <= m; j++)
      ;
    if (j > 1) sort(a + 1, a + j, leftcmp);
    if (j < m) sort(a + j + 1, a + m + 1, rightcmp);
    memset(f, 0, sizeof(f));
    memset(vis, 0, sizeof(vis));
    if (a[j].p > i && (j > 1 && dfs(1, j - 1, i, 1) && dfs(j, m, i + 1, 0) ||
                       j == 1 && dfs(1, m, i, 0))) {
      cout << i << endl;
      print(j - 1, 1);
      return 0;
    }
    memset(f, 0, sizeof(f));
    memset(vis, 0, sizeof(vis));
    if (j <= m && dfs(1, j - 1, i - 1, 1) && dfs(j, m, i, 0) ||
        j > m && dfs(1, m, i, 1)) {
      cout << i << endl;
      print(j - 1, 0);
      return 0;
    }
  }
  cout << -1;
  return 0;
}
