#include <bits/stdc++.h>
using namespace std;
const int maxn = 301;
const int maxw = 100100;
const long long mod = 1000000007;
long long n, q, t;
int a[maxn];
long long p[maxn];
int in[maxn];
bool g[maxn][maxn];
long long dp[maxw];
bool dfs(int v, long long cumulatedSum) {
  if (p[v] != 0) {
    return false;
  }
  p[v] = a[v] + cumulatedSum;
  for (int i = 0; i < n; i++) {
    if (g[v][i]) {
      t -= p[v];
      return dfs(i, cumulatedSum + a[v]);
    }
  }
  return true;
}
int main() {
  scanf("%I64d%I64d%I64d", &n, &q, &t);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < q; i++) {
    int b, c;
    scanf("%d%d", &b, &c);
    b--;
    c--;
    g[b][c] = true;
    in[c]++;
  }
  for (int i = 0; i < n; i++) {
    if (in[i] == 0) {
      if (!dfs(i, 0)) {
        printf("0");
        return 0;
      }
    }
  }
  for (int i = 0; i < n; i++) {
    if (p[i] == 0) {
      printf("0");
      return 0;
    }
  }
  if (t < 0) {
    printf("0");
    return 0;
  }
  dp[0] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= t; j++) {
      if (j + p[i] <= t && dp[j] != 0) {
        dp[j + p[i]] += dp[j];
        dp[j + p[i]] %= mod;
      }
    }
  }
  printf("%I64d", dp[t]);
  return 0;
}
