#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
long long n, m;
int mi, mx, head[maxn], cnt = 0;
int via[maxn];
int d[maxn];
struct node {
  int v, next;
} t[maxn];
queue<int> q;
bool check[maxn];
void spfa(int t1, int mode) {
  q.push(t1);
  d[t1] = 0;
  check[t1] = 1;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    check[u] = 0;
    int x = head[u];
    while (x) {
      if (d[t[x].v] > d[u] + 1) {
        d[t[x].v] = d[u] + 1;
        if (!check[t[x].v]) {
          check[t[x].v] = 1;
          q.push(t[x].v);
        }
      }
      if (mode == 2 && d[t[x].v] == d[u] + 1) {
        via[t[x].v]++;
        if (!check[t[x].v]) {
          check[t[x].v] = 1;
          q.push(t[x].v);
        }
      }
      x = t[x].next;
    }
  }
}
int k;
int p[maxn];
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) d[i] = INT_MAX;
  for (int i = 1; i <= m; i++) {
    int u, v;
    cin >> v >> u;
    t[++cnt].v = v;
    t[cnt].next = head[u];
    head[u] = cnt;
  }
  cin >> k;
  for (int i = 1; i <= k; i++) {
    cin >> p[i];
  }
  spfa(p[k], 1);
  spfa(p[k], 2);
  for (int i = 2; i <= k; i++) {
    if (d[p[i]] != d[p[i - 1]] - 1) mi++;
  }
  for (int i = 1; i <= k; i++) {
    if (via[p[i]] > 1) mx++;
  }
  for (int i = 2; i <= k; i++) {
    if (via[p[i - 1]] <= 1 && d[p[i]] != d[p[i - 1]] - 1) mx++;
  }
  cout << mi << ' ' << mx << endl;
  return 0;
}
