#include<bits/stdc++.h>
using namespace std;
template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')';}
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) {os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg() { cerr << endl; }
template<typename Head, typename... Tail> void dbg(Head H, Tail... T) { cerr << ' ' << H; dbg(T...); }
template<typename T> void dbg_a(const T *a,int l,int r){cerr<<" {";for(int i = l;i<r;i++) cerr<<a[i]<<", ";cerr<<a[r]<<"}"<<endl;}
typedef long long ll;
//#define int long long

#define mst(a,b) memset(a,b,sizeof(a))
#define For(i,a,b) for(int i = a;i<=b;i++)
#define For_(i,a,b) for(int i = a;i>=b;i--)
#define rep(i,a) for(int i = 0;i<a;i++)
#define All(x) x.begin(),x.end()

//const ll INF = 0x3f3f3f3f3f3f3f3f;
const int INF = 0x3f3f3f3f;
const int N = 200 + 6,M = (N*N) + 6;
const int mod = 1e9 + 7;
int h[N],e[M],ne[M],w[M],idx = 1;
int d[N],now[M],q[N];
int s,t;
void add(int x,int y,int z){
    e[++idx] = y,ne[idx] = h[x], h[x] = idx,w[idx] = z;
    e[++idx] = x,ne[idx] = h[y], h[y] = idx,w[idx] = 0;
}

bool bfs(){
    int hh = 0,tt = 0;
    memset(d,0,sizeof(d));
    d[s] = 1,q[0] = s;
    now[s] = h[s];
    while(hh <= tt){
        int x = q[hh++];
        for(int i = h[x];i;i = ne[i]){
            int y = e[i];
            if(w[i] && !d[y]){
                now[y] = h[y];
                d[y] = d[x] + 1;
                if(y == t) return 1;
                q[++tt] = y;
            }
        }
    }
    return 0;
}
int dfs(int x,int limit){
    if(x == t) return limit;
    int flow = 0;
    for(int i = now[x] ;i &&flow<limit;i = ne[i]){
        now[x] = i; //当前弧优化
        int y = e[i];
        if(d[y] == d[x] + 1 && w[i]){
            int k = dfs(y,min(w[i],limit - flow));
            if(!k) d[y] = 0;
            w[i] -= k,w[i^1] += k,flow += k;
        }
    }
    return flow;
}
int dinic(){
    int flow = 0,maxflow = 0;
    while(bfs()) while(flow = dfs(s,INF)) maxflow += flow;
    return maxflow;
}
ll a[N],b[N],dp[N][N];
int n,m,k;
int p[N][N];
void solve(){
    cin>>n>>m>>k;
    s = 0,t = 2*n + 1;
    For(i,1,n) add(s,i,1),add(i+n,t,1);
    For(i,1,m){
        int x,y;
        cin>>x>>y;
        add(x,y+n,1);
    }
    For(i,1,k){
        cin>>a[i]>>b[i];
    }
    int ans = dinic();
    int res = n - ans;
    if(res > k){
        cout<<k<<"\n";
        For(i,1,k) cout<<0<<" ";
        return ;
    }
    int g = k - res + 1;
    vector<int> v;
    For(i,1,n){
        if(!d[i]) v.emplace_back(i);
        if(d[i+n]) v.emplace_back(-i);
    }
    For(i,1,k) dp[0][i] = -1e18;
    For(i,1,k){
        For(j,0,g) dp[i][j] = -1e18;
        For(j,max(0,i-res+1),g){
            For(l,0,j){
                ll cur = dp[i-1][j-l] + max(0ll,a[i] - l*b[i]);
                if(cur > dp[i][j]){
                    dp[i][j] = cur;
                    p[i][j] = j - l;
                }
            }
        }
    }
    res = g;
    vector<int> v2;
    For_(i,k,1){
        int tt = res - p[i][res];
        v2.emplace_back(0);
        while(tt--) v2.emplace_back(v.back()),v.pop_back();
        res = p[i][res];
    }
    cout<<v2.size()<<"\n";
    reverse(All(v2));
    rep(i,v2.size()) cout<<v2[i]<<" ";
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0);
    int T = 1;
    //cin>>T;
    while(T--) solve();    
    return 0;
}