#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const long long mod = 1e9 + 7;
const long long maxn = 2e5 + 10;
int n, m, k, mx, mm;
int paths[maxn], dd[maxn];
int hh[maxn], hn[maxn], hy[maxn], ht;
int dis[maxn], cnt[maxn], vis[maxn];
priority_queue<pair<int, int> > q;
void solve(int s) {
  for (int i = 1; i <= n; i++) dis[i] = n + 1;
  dis[s] = 0;
  cnt[s] = 1;
  q.push(pair<int, int>(0, s));
  while (!q.empty()) {
    pair<int, int> now = q.top();
    q.pop();
    if (vis[now.second]) continue;
    vis[now.second] = 1;
    now.first = -now.first;
    for (int i = hh[now.second]; i > 0; i = hn[i]) {
      if (vis[hy[i]]) continue;
      if (dis[hy[i]] > now.first + 1) {
        dis[hy[i]] = now.first + 1;
        cnt[hy[i]] = 1;
        q.push(pair<int, int>(-dis[hy[i]], hy[i]));
      } else if (dis[hy[i]] == now.first + 1) {
        cnt[hy[i]]++;
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int x, y;
    cin >> x >> y;
    ht++;
    hn[ht] = hh[y];
    hh[y] = ht;
    hy[ht] = x;
  }
  cin >> k;
  for (int i = 1; i <= k; i++) cin >> paths[i];
  solve(paths[k]);
  for (int i = 1; i < k; i++) {
    if (dis[paths[i]] == dis[paths[i + 1]] + 1) {
      if (cnt[paths[i]] > 1) mx++;
    } else {
      mx++;
      mm++;
    }
  }
  cout << mm << " " << mx << endl;
  return 0;
}
