#include <bits/stdc++.h>
using namespace std;
const int inf = 2147483647;
struct edge {
  int x, y;
} e[200020];
int fst[200020] = {};
int nex[200020] = {};
int v[200020] = {};
int que[400020] = {};
int dis[200020] = {};
int rod[200020] = {};
int ffst[200020] = {};
int fnex[200020] = {};
int group[200020] = {};
signed main() {
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    e[i].x = x;
    e[i].y = y;
    nex[i] = fst[x];
    fst[x] = i;
    fnex[i] = ffst[y];
    ffst[y] = i;
  }
  int numround;
  cin >> numround;
  for (int i = 1; i <= numround; i++) {
    scanf("%d", rod + i);
  }
  int tar = rod[numround];
  for (int i = 1; i <= n; i++) {
    dis[i] = inf;
  }
  dis[tar] = 0;
  que[0] = tar;
  v[tar] = 1;
  int h = 0, t = 0;
  while (h <= t) {
    int x = que[h];
    int tmp = ffst[x];
    while (tmp != 0) {
      if (dis[e[tmp].x] > dis[e[tmp].y] + 1) {
        dis[e[tmp].x] = dis[e[tmp].y] + 1;
        if (!v[e[tmp].x]) {
          v[e[tmp].x] = 1;
          t++;
          que[t] = e[tmp].x;
        }
      }
      tmp = fnex[tmp];
    }
    v[que[h]] = 0;
    h++;
  }
  int minans = 0, maxans = 0;
  for (int i = 1; i <= numround - 2; i++) {
    int tmp = fst[rod[i]];
    int min = inf;
    int nummin = 0;
    while (tmp != 0) {
      if (dis[e[tmp].y] < min) {
        min = dis[e[tmp].y];
        nummin = 1;
        group[nummin] = e[tmp].y;
      } else if (dis[e[tmp].y] == min) {
        nummin++;
        group[nummin] = e[tmp].y;
      }
      tmp = nex[tmp];
    }
    int f = 0;
    for (int j = 1; j <= nummin; j++) {
      if (group[j] == rod[i + 1]) {
        if (nummin == 1) {
          f = 1;
          continue;
        } else {
          maxans++;
        }
        f = 1;
      }
      if (f) break;
    }
    if (!f) {
      maxans++;
      minans++;
    }
  }
  cout << minans << ' ' << maxans << endl;
  return 0;
}
