#include<bits/stdc++.h>
using namespace std;
int n,m,w,edge[500005],head[500005],nxt[500005];
int c[500005],ww[500005],flag[500005];
int c1[500005],w1[500005];
int cnt,tot,ans,sum,f[500005];
void add_edge(int x,int y){
nxt[++tot]=head[x];
head[x]=tot;
edge[tot]=y;
}
void dfs(int u,int fa){
for(int i=head[u];i;i=nxt[i]){
int v=edge[i];
if(v==fa) continue;
flag[v]=1;
ans+=ww[v];
sum+=c[v];
dfs(v,u);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>w;
for(int i=1;i<=n;i++) cin>>c[i]>>ww[i];
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
add_edge(x,y);
add_edge(y,x);
}
for(int i=1;i<=n;i++){
if(!flag[i]){
dfs(i,0);
ans+=ww[i],sum+=c[i];
w1[++cnt]=ans;
c1[cnt]=sum;
}
ans=0,sum=0;
}
for(int i=1;i<=cnt;i++){
for(int j=w;j>=c1[i];j--)
f[j]=max(f[j],f[j-c1[i]]+w1[i]);
}
cout<<f[w];
return 0;
}