#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 4;
int n, m, k;
vector<int> g[N], g1[N], path;
int d[N];
bool used[N];
void read() {
  cin >> n >> m;
  for (int i = 0; i < m; ++i) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g1[v].push_back(u);
  }
  cin >> k;
  for (int i = 0; i < k; ++i) {
    int u;
    cin >> u;
    path.push_back(u);
  }
}
void bfs() {
  queue<int> q;
  int s = path.back();
  d[s] = 0;
  used[s] = true;
  q.push(s);
  while (q.size()) {
    int u = q.front();
    q.pop();
    for (int to : g1[u]) {
      if (used[to]) {
        continue;
      }
      d[to] = d[u] + 1;
      used[to] = true;
      q.push(to);
    }
  }
}
void solve() {
  read();
  bfs();
  long long cntMx = 0, cntMn = 0;
  for (int i = 0; i < k - 1; ++i) {
    int u = path[i];
    int cur = 0, mn = 1e9;
    for (int to : g[u]) {
      mn = min(mn, d[to]);
    }
    for (int to : g[u]) {
      if (to == path[i + 1] || d[to] != mn) {
        continue;
      }
      cur = 1;
    }
    cntMx += cur;
    cntMn += (long long)(d[path[i + 1]] != mn);
  }
  cout << cntMn << " " << cntMx;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  for (int i = 0; i < t; ++i) {
    solve();
  }
  return 0;
}
