rt
#include<bits/stdc++.h>
using namespace std;
int n,m,w,c[10001],d[10001],id,di[10001],ji[10001];
int nt[10001],lt[5005],to[5005],cnt;
int dp[10001];
bool f[10001];
void add(int x,int y)
{
to[++cnt]=y;
lt[cnt]=nt[x];
nt[x]=cnt;
return;
}
void dfs(int l)
{
f[l]=1;
di[id]+=c[l];
ji[id]+=d[l];
for(int i=nt[l];i;i=lt[i])
{
if(!f[to[i]])
{
dfs(to[i]);
}
}
return;
}
int main()
{
cin>>n>>m>>w;
for(int i=1;i<=n;i++)
{
cin>>c[i]>>d[i];
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
for(int i=1;i<=n;i++)
{
if(!f[i])
{
id++;
dfs(i);
}
}
for(int i=1;i<=id;i++)
{
for(int j=w;j>=di[i];j--)
{
dp[j]=max(dp[j],dp[j-di[i]]+ji[i]);
}
}
cout<<dp[w];
return 0;
}
谢谢