#include <bits/stdc++.h>
using namespace std;
const int Maxn = 201000;
struct node {
  int to, next;
} e[Maxn];
struct node1 {
  int to, next;
} e1[Maxn];
int n, m, h[Maxn], dis[Maxn], tot, p[Maxn], k, h1[Maxn], tot1;
bool vis[Maxn];
void Add(int u, int v) {
  e[++tot].to = v;
  e[tot].next = h[u];
  h[u] = tot;
}
void Add1(int u, int v) {
  e1[++tot1].to = v;
  e1[tot1].next = h1[u];
  h1[u] = tot1;
}
queue<int> Q;
void Spfa() {
  for (int i = 1; i <= n; ++i) dis[i] = 10000000;
  vis[p[k]] = 1;
  dis[p[k]] = 0;
  Q.push(p[k]);
  while (!Q.empty()) {
    int u = Q.front();
    Q.pop();
    vis[u] = 0;
    for (int i = h[u]; i; i = e[i].next) {
      int v = e[i].to;
      if (dis[v] == 10000000) {
        dis[v] = dis[u] + 1;
        if (!vis[v]) {
          Q.push(v);
          vis[v] = 1;
        }
      }
    }
  }
}
queue<int> Q1;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= m; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    Add(v, u);
    Add1(u, v);
  }
  cin >> k;
  for (int i = 1; i <= k; ++i) scanf("%d", &p[i]);
  Spfa();
  Q1.push(p[1]);
  int ans1 = 0, ans2 = 0;
  for (int now = 1; now < k; ++now) {
    int u = p[now];
    if (dis[p[now + 1]] != dis[u] - 1) ++ans1;
  }
  for (int now = 1; now < k; ++now) {
    int u = p[now];
    for (int i = h1[u]; i; i = e1[i].next) {
      int v = e1[i].to;
      if (v != p[now + 1] && dis[v] == dis[u] - 1) {
        ++ans2;
        break;
      }
    }
  }
  cout << ans1 << ' ' << ans2 << endl;
  return 0;
}
